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/>';
Returns:
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)...
而对于 "echoing",您可以按照自己的方式设置格式,请看这里的示例:https://ideone.com/dgSVDY
我正在比较 PHP 中的日期,出于某种原因,它现在可以正常工作了。如果日期已过或等于当前日期,我想回显红色字体。我知道还有其他问题,我读了很多,但这对我来说没有意义。
两个变量:
$Now = new DateTime('now');
$DueDate = new DateTime($pScheduledDueDate);
回显时:
echo $DueDate->format('m/d/y').'<br/>';
echo $Now->format('m/d/y').'<br/>';
Returns:
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)...
而对于 "echoing",您可以按照自己的方式设置格式,请看这里的示例:https://ideone.com/dgSVDY