PHP Datetime сравнение не имеет смысла

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

Две переменные:

$Now = new DateTime('now');
$DueDate = new DateTime($pScheduledDueDate);

Когда повторили:

echo $DueDate->format('m/d/y').'<br/>';
echo $Now->format('m/d/y').'<br/>';

Возвращает:

11/27/14
01/21/16

Сравнение:

 if($DueDate->format('m/d/y') <= $Now->format('m/d/y')){
echo '<font color="red">'.$DueDate->format('m/d/y').'</font>';
}
else {
echo $DueDate->format('m/d/y');
}Result: false. It does not make sense to me. Shouldn't it return true?

0

Решение

Вы сравниваете две строки друг с другом, что не обязательно имеет смысл, потому что PHP не будет знать, что это даты, и их следует сравнивать как даты.

Чтобы сравнить два объекта DateTime, я бы изменил ваш метод сравнения, чтобы вместо этого посмотреть на значение метки времени DateTime:

if($DueDate->getTimestamp() <= $Now->getTimestamp())

Это сравнивает целочисленное значение времени двух объектов DateTime, и вы получите ожидаемые результаты.

Объекты PHP DateTime также можно сравнивать напрямую, без необходимости переформатирования

if($DueDate <= $Now)
2

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

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

$Now = new DateTime('now');
$pScheduledDueDate = '11/27/14';
$DueDate = new DateTime($pScheduledDueDate);
if($DueDate <= $Now)...

А для «эха» вы можете отформатировать так, как вы хотите, посмотрите здесь пример: https://ideone.com/dgSVDY

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector