【问题标题】:Comparing dates giving incorrect outputs比较给出错误输出的日期
【发布时间】:2015-05-12 11:53:23
【问题描述】:

我正在创建一个函数来检查在充满日期的数据库表中哪个日期小于当前日期。和过去一样。

我有 3 个日期来测试函数,以及它们背后的输出:

上个月日期:28-04-2015 16:32:00
尚未到来的日期:11-06-2015 13:12:00
上周日期:04-05-2015 09:45:00

$dateNow = date('d-m-Y H:i:s'); //Current
$deadlineDate = "28-04-2015 16:33:18";

if($deadlineDate < $dateNow){ //If date from last month is smaller then the current date
    echo '<tr class="overdue">'; //Overdue class gives that tr an red background color to mark it
    echo '<td>'.$deadlineDate.' is smaller then '.$dateNow.'</td>';
}else{
    echo '<tr>';
    echo '<td>'.$deadlineDate.' is bigger dan '.$dateNow.'</td>';
}

</tr>

输出:

28-04-2015 16:32:00 返回更大
11-06-2015 13:12:00 返回更小
04-05-2015 09:45:00 返回更小

谁能告诉我怎么回事?

【问题讨论】:

  • 您可能需要澄清您的问题,并添加一些您尝试过的事情的示例以及您拥有的任何调试输出,以便获得任何帮助。您可以随时更新您的问题。欢迎来到栈溢出,推荐阅读:stackoverflow.com/help/how-to-ask

标签: php date date-comparison


【解决方案1】:

您的“日期”实际上是字符串。当比较它们时,它是按字母顺序排列的。您需要将这些日期转换为 真实 日期才能使用:

$dateNow = new DateTime();
$deadlineDate = DateTime::createFromFormat("d-m-Y H:i:s", "28-04-2015 16:33:18");
if($deadlineDate < $dateNow){ //If date from last month is smaller then the current date
    echo '<tr class="overdue">'; //Overdue class gives that tr an red background color to mark it
    echo '<td>'.$deadlineDate.' is smaller then '.$dateNow.'</td>';
}else{
    echo '<tr>';
    echo '<td>'.$deadlineDate.' is bigger dan '.$dateNow.'</td>';
}

将它们转换为 YYYY-MM-DD 格式也可以。

【讨论】:

  • 我认为是这样的。我试图自己转换它们,但仍然得到相同的结果。谢谢你的提示,下次我不会犯同样的错误:)
【解决方案2】:

你不能像这样比较date string。首先将其转换为timestamp。使用strtotime。

$dateNow = date('d-m-Y H:i:s'); //Current
$deadlineDate = "28-04-2015 16:33:18";

if(strtotime($deadlineDate) < strtotime($dateNow)){ //If date from last month is smaller then the current date
    echo '<tr class="overdue">'; //Overdue class gives that tr an red background color to mark it
    echo '<td>'.$deadlineDate.' is smaller then '.$dateNow.'</td>';
}else{
    echo '<tr>';
    echo '<td>'.$deadlineDate.' is bigger dan '.$dateNow.'</td>';
}

【讨论】:

  • 几分钟前我刚刚尝试过,但没有成功。我在 if-else 语句上方使用了 strtotime。但它现在似乎正在工作。感谢您的快速回答:)
  • 为此必须使用DateTime 类。
  • @sgtBOSE 是的,我必须更喜欢 DateTime 类,但这可以完成工作
  • @sgtBOSE 使用DateTime 处理这种事情会更好吗?喜欢约翰康德的回答吗?
  • 是的。 strtotime() 有时无法正确区分格式。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 2014-08-20
  • 1970-01-01
  • 2021-01-10
  • 1970-01-01
  • 2014-09-07
  • 1970-01-01
相关资源
最近更新 更多