Я сравниваю даты в 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?
Вы сравниваете две строки друг с другом, что не обязательно имеет смысл, потому что PHP не будет знать, что это даты, и их следует сравнивать как даты.
Чтобы сравнить два объекта DateTime, я бы изменил ваш метод сравнения, чтобы вместо этого посмотреть на значение метки времени DateTime:
if($DueDate->getTimestamp() <= $Now->getTimestamp())
Это сравнивает целочисленное значение времени двух объектов DateTime, и вы получите ожидаемые результаты.
Объекты PHP DateTime также можно сравнивать напрямую, без необходимости переформатирования
if($DueDate <= $Now)
Причина, по которой это происходит, заключается в том, что когда вы используете format
, он превращает ваш DateTime в строку. Правильный способ сравнить это так:
$Now = new DateTime('now');
$pScheduledDueDate = '11/27/14';
$DueDate = new DateTime($pScheduledDueDate);
if($DueDate <= $Now)...
А для «эха» вы можете отформатировать так, как вы хотите, посмотрите здесь пример: https://ideone.com/dgSVDY