【问题标题】:Comparing two dates in php not working [duplicate]比较php中的两个日期不起作用[重复]
【发布时间】:2018-06-27 18:19:35
【问题描述】:

我有这段代码要比较:

 $dateregister = date("d/m/Y", strtotime($register['date']));
   if ($dateregister < date('d/m/Y')) {
      $class = 'danger';
   } else {
     $class = '';
   }

总是输入 if,但有些日期 ($dateregister) 大于 date(d/m/Y)

【问题讨论】:

  • date 返回一个字符串,因此您实际上是在比较两个字符串。最好使用DateTime class!
  • 你正在做一个纯字符串比较。 2/1/1999 &gt; 1/1/2018。如果您真的不想使用 DateTime 类,请通过 date('Ymd') 进行比较(将其视为 int)。
  • 谢谢,我的dateregister是d/m/Y格式
  • 所以?您正在将 $register['date'] 转换为时间戳,然后将其转换回字符串。并进行字符串比较。 $register['date'] 里面到底是什么?做一个DateTime::createFromFormat,然后使用类方法与今天进行比较。
  • 31/01/18 或 310118 > 然后 15/12/18 或 151218,您不应该比较字符串值的日期。只是找个骗子,之前已经回答过很多次了。

标签: php


【解决方案1】:
$dateRegister = strtotime($register['date']);
if($dateRegister < strtotime(date('d/m/Y'))){
     $class = "danger";
}else{
     $class = "";
}

我相信这会有所帮助,因为 strtotime 返回时间戳,它会执行精确的比较运算符

否则你应该使用 Date Class 并且很容易比较两个日期。

$today = new DateTime('');
$expireDate = new DateTime($row->expireDate); //from database

if($today->format("Y-m-d") < $expireDate->format("Y-m-d")) { 
   //do something; 
}

【讨论】:

  • 谢谢,但不会工作
  • 我更新了另一种可能的解决方案。
  • 谢谢。但同样的问题
  • 由于某种原因,当我输入format("d-m-Y") 时无法正常工作,但当我输入format("Y-m-d") 时工作正常
  • 嗯,有存储日期 Y-m-d 的标准,所以也许我们需要先转换成标准,然后再转换成可打印的形式。
猜你喜欢
  • 2014-07-16
  • 2011-09-28
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多