【问题标题】:PHP Datetime comparison Makes no sensePHP 日期时间比较没有意义
【发布时间】:2016-01-21 12:41:00
【问题描述】:

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


    【解决方案1】:

    您正在将两个字符串相互比较,这不一定有意义,因为 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-22
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多