PHP日期时间比较没有任何意义

时间:2016-01-21 12:41:00

标签: php datetime datetime-format

我正在比较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?

2 个答案:

答案 0 :(得分:2)

您将两个字符串相互比较,这一点不一定有意义,因为PHP不知道他们的约会日期,应该作为日期进行比较。

为了比较两个这样的DateTime对象,我会改变你的比较方法来代替DateTime的时间戳值:

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

这会比较两个DateTime对象的整数时间值,并且您将获得预期的结果。

还可以直接比较PHP DateTime对象,而无需涉及重新格式化

if($DueDate <= $Now)

答案 1 :(得分:1)

之所以发生这种情况,是因为当您使用format时,它会将您的DateTime转换为字符串。比较的正确方法是:

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

对于“回音”,你可以按照你想要的方式格式化,在这里看一个例子:https://ideone.com/dgSVDY