date — Сравнение дня и месяца в переполнении стека

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

Проблема:
Задача состоит в том, чтобы сравнить 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;
}
}
?>

Я чувствую, что с моим заявлением IFS что-то не так.

0

Решение

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

$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";
}
2

Другие решения

Вы не можете положить <?php теги внутри Heredoc. Итак, вместо использования heredoc вы можете сделать:

echo '<li class="next">' . link_to_next_item_show() . '</li>';
0

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

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

<?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. Теперь я знаю, что не так с кодом. Я даю это в качестве ответа, чтобы другие люди извлекли выгоду из этого, если они пытаются сравнить две даты (сравнивая только день и месяц, независимо от его года). Надеюсь, что это будет полезно для других в будущем.

0
По вопросам рекламы [email protected]