Сравнение дня и месяца в php

Добрый вечер!

Проблема: Проблема состоит в том, чтобы сравнить 2 даты в PHP. Я хочу сравнить только день и месяц, исключая год. Я хочу, чтобы код сначала проверял месяц, если он такой же или меньше текущего месяца. Если это правда, перейдите к проверке дня. Если день равен или меньше текущего дня, выполните пользовательский код.

Что я пробовал: вот где я до сих пор -

<?php
$oldDate = "26/02/1815";
$latestDate = explode("/", $oldDate);
$year = $latestDate[2];
$month = $latestDate[1];
$day = $latestDate[0];

$newDate = $month.'/'.$day.'/'.$year;
$nowDate = date('m/d/Y');

$nownowDate = explode("/", $nowDate);
$nowYear = $nownowDate[2];
$nowMonth = $nownowDate[0];
$nowDay = $nownowDate[1];

if ($nowMonth <= $month) {
    if ($nowDay <= $day) {
        echo<<<NEXTDATE
        <li class="next"><?php echo link_to_next_item_show(); ?></li> //This is the custom code
NEXTDATE;
    } 
} 
?>

Я чувствую, что что-то не так с моим утверждением ЕСЛИ.


person Hafiz Hanif    schedule 02.03.2015    source источник
comment
Вы получаете какую-либо форму ошибки? Не могу сказать, что знаком с синтаксисом ‹‹‹, но ваши операторы if выглядят нормально.   -  person CT14.IT    schedule 02.03.2015
comment
I feel that there is something wrong with my IFs statement. Почему? Вам нужно описать реальную проблему, а не просто констатировать, что у вас есть смутное предчувствие.   -  person developerwjk    schedule 02.03.2015
comment
@developerwjk Проблема в том, что в пользовательском коде есть блок кода html + php, который необходимо отобразить, когда условие истинно, но я не могу отобразить пользовательский код, как будто что-то не так с IF утверждение. Я не могу понять это.   -  person Hafiz Hanif    schedule 02.03.2015
comment
@ CT14.IT это называется heredoc php .net/manual/ru/   -  person Hafiz Hanif    schedule 02.03.2015
comment
В приведенном вами примере операторы if в порядке. Если я изменю oldDate, например, на 26.04.2015 У меня выводится Custom code. Я не думаю, что здесь кто-то может помочь, пока мы не увидим фактический код, который является проблемой.   -  person CT14.IT    schedule 02.03.2015
comment
@ CT14.IT Я добавил пользовательский код. Я думаю, что есть проблема с проверкой дня. Я вот тоже пытаюсь.   -  person Hafiz Hanif    schedule 02.03.2015


Ответы (3)


From: Элегантный способ подсчета месяцев между двумя датами?

$timezone = new DateTimeZone('America/New_York'); 
$d1 = new DateTime("1815-02-26", $timezone);
$d2 = new DateTime("2015-01-01", $timezone);

var_dump($d1->diff($d2)->m); // int(4)
var_dump($d1->diff($d2)->d); // int(4)

if(($d1->diff($d2)->m) && ($d1->diff($d2)->d)){
   echo "run code here";
}
person Matt    schedule 02.03.2015


Спасибо всем за то, что приложили все усилия для решения этой проблемы. Может быть, я не ясно выразился, поэтому некоторые из вас боролись, пытаясь понять, о чем я говорю.

Я пытался решить эту проблему с помощью переключателя, так что вот ответ, который работает для меня.

<?php 

$oldDate = metadata('item', array('Dublin Core', 'Date')); 
$latestDate = explode("/", $oldDate);
$year = $latestDate[2];
$month = $latestDate[1];
$day = $latestDate[0];

$newDate = $month.'/'.$day.'/'.$year;
$nowDate = date('m/d/Y');

$nownowDate = explode("/", $nowDate);
$nowYear = $nownowDate[2];
$nowMonth = $nownowDate[0];
$nowDay = $nownowDate[1];

switch (true):

  case ($month == $nowMonth):
    if ($day < $nowDay) {
      echo '<li class="next">' . link_to_next_item_show() . '</li>';
    } else {
      echo " ";
    }
    break;

  case ($month < $nowMonth):
    echo '<li class="next">' . link_to_next_item_show() . '</li>';
    break;

  case ($month > $nowMonth):
    echo " "; 
    break;
  default :
    echo " ";
    break;
endswitch;

?>

Спасибо @developerwjk за исправление использования тега php внутри heredoc. Теперь я знаю, что не так с кодом. Я предоставляю это как ответ, чтобы другие люди могли извлечь из этого пользу, если они пытаются сравнить две даты (сравнивая только день и месяц, независимо от года). Надеюсь, это будет полезно для других в будущем.

person Hafiz Hanif    schedule 03.03.2015