PHP 日期时间比较 没有意义


PHP Datetime comparison Makes no sense

由于某种原因,我正在比较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