Php 未来与当前日期比较

Php 未来与当前日期比较,php,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!

我有一个简短的代码,比较两个似乎不起作用的日期,我想看看是否有人可以解释为什么

  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!";
  }
date\u default\u timezone\u set(“美国/纽约”);
$today=日期(“m-d-y”);
$dueDate=日期(“05-08-21”);
如果($dueDate>$today){
回声“成功!”;
}
否则{
回声“失败!”;
}

当我运行这段代码时,我不断收到“失败!”的消息,即使5/08/21即将到来。

有两个原因导致代码无法工作

  • 函数的作用是:格式化提供的日期(实际的时间戳)。如果未提供日期,则会根据今天的日期生成格式。因此,您需要使用mktime()或strotime()之类的工具来创建到期日所需的时间戳

  • 如果计划使用字符串比较来确定日期是否在将来,则必须使用可排序格式,如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!";
      }
    
    date\u default\u timezone\u set(“美国/纽约”);
    $today=日期(“Y-m-d”);
    $dueDate=日期(“Y-m-d”,标准时间(“05-08-21”);
    如果($dueDate>$today){
    回声“成功!”;
    }
    否则{
    回声“失败!”;
    }
    
    注意:我使用的日期是您格式化为“05-08-21”的日期,这将导致日期为8月5日。如果您的意思是“5月8日”,那么将字符串改为使用斜杠(“05/08/21”)而不是破折号

    相关文件:


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

    • 日期(“05-08-21”)不是该函数的有效使用。要返回此日期的格式化日期,请运行以下操作:
    日期('m-d-y',标准时间('05-08-21')

    • 为了比较日期,需要使用类将它们声明为日期对象,或者使用
    实现这一点的现代方法是像这样使用
    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>";
    }
    
    //定义格式
    $format=“m-d-y”;
    //创建日期对象
    $today=new\DateTime();
    $dueDate=\DateTime::createFromFormat($format,“05-08-21”);
    //然后你可以运行你的状态。。。
    如果($dueDate>$today){
    回声“成功!

    ”; }否则{ 回声“故障!

    ”; }
    日期()的可能重复项
    返回一个字符串,您确实无法比较这些字符串