未来与现在日期比较

时间:2019-07-04 23:43:04

标签: php

我有一小段代码比较两个似乎无效的日期,我想看看是否有人可以解释原因。

  date_default_timezone_set("America/New_York");
  $today = date("m-d-y");

  $dueDate = date("05-08-21");

  if ($dueDate > $today) {
    echo "<p> Success!";
  }
  else {
    echo "<p> Failure!";
  }

运行此代码时,我不断收到“失败!”即使将来的日期为21/05/08。

2 个答案:

答案 0 :(得分:0)

您的代码无法正常工作的原因有两个。

  1. date()函数格式化提供的日期(实际上是时间戳)。如果未提供日期,则它将基于今天的日期生成格式。因此,您需要使用mktime()或strtotime()之类的东西来创建到期日的时间戳。

  2. 如果您打算使用字符串比较来确定日期是否是将来的日期,则必须使用诸如Y-m-d之类的可排序格式。

修正了这些问题的代码版本可能看起来像这样:

  date_default_timezone_set("America/New_York");
  $today = date("Y-m-d");

  $dueDate = date("Y-m-d", strtotime("05-08-21"));

  if ($dueDate > $today) {
     echo "<p> Success!";
  }
  else {
     echo "<p> Failure!";
  }

注意:我使用的日期与您设置的日期格式“ 05-08-21”相同,因此该日期为8月5日。如果您确实要说5月8日,则将字符串更改为使用斜杠(“ 05/08/21”)而不是破折号。

相关文档:

https://www.php.net/manual/en/function.strtotime.php https://www.php.net/manual/en/function.date.php

答案 1 :(得分:0)

您的方法不起作用的原因有几个:

  • date("05-08-21");不是该函数的有效用法。要返回该日期的格式化日期,请运行以下命令:

date('m-d-y', strtotime('05-08-21'));

  • 为了比较日期,需要使用DateTime类将它们声明为日期对象,或者使用strtotime将它们转换为时间戳记

实现这一目标的现代方法是像这样使用DateTime

// Define the format
$format = "m-d-y";

// Create the date objects
$today    = new \DateTime();
$dueDate  = \DateTime::createFromFormat($format, "05-08-21");

// Then you can run your condition...
if ($dueDate > $today) {
    echo "<p>Success!</p>";
} else {
    echo "<p>Failure!</p>";
}