【问题标题】:Why doesn't PHP recognise when the date given is after today's date?为什么 PHP 不能识别给定日期在今天之后的日期?
【发布时间】:2011-10-03 11:00:30
【问题描述】:

我想在 PHP 中比较两个日期。 一个日期是到期日期,由用户提供,存储在数据库中并使用 PHP 检索。 第二个是今天的日期。

    $unixdue = strtotime($query['date_due']); //Converts the database integer to Unix date
    $duestamp = date("dmY", $unixdue); //Converts the Unix date to dd-mm-yyyy


//If the due date is larger than today (i.e., after today), it's early.
        if ($query['complete'] == 0 AND date("dmY") < $duestamp) {echo "Early";}
//If the due date is smaller than today (i.e., before today), it's late.
        elseif ($query['complete'] == 0 AND date("dmY") > $duestamp) {echo "Late";}
//If the due date IS today, it's today.
        elseif ($query['complete'] == 0 AND date("dmY") == $duestamp) {echo "Today";}

它适用于今天的日期,但所有其他日期都返回“早”,即使它们不早。 因此,我什至无法判断其余部分是否正常工作。

我尝试比较两个 Unix 日期,但它们也包括时间,而我实际上只想要日期。如果我比较两个 unix 日期,我不能说某事是否是“今天”。

【问题讨论】:

  • 你能显示一些实际数据吗? date_due 包含什么内容以及它被制成什么时间戳?
  • 您不是在比较日期,而是在比较字符串。
  • 这不是 PHP,这是你的代码。

标签: php mysql unix date compare


【解决方案1】:

您无法比较两个字符串是否小于或大于彼此。或者你可以,但在这种情况下你不应该因为结果不是你想要的(例如“03092011”

您可以先比较日期是否与您所做的相同;如果不是,您可以比较时间戳。即使您只使用日期也没关系,因为较早日期的时间戳总是小于较晚日期的时间戳,与时间部分无关。

if( $query['complete'] == 0 ) {
    if( date("dmY") == $duestamp ) { echo "Today"; }
    elseif( time() < $unixdue ) { echo "Early"; }
    elseif( time() > $unixdue ) { echo "Late"; }
}

【讨论】:

    【解决方案2】:

    你的比较方式不对。

    可能的解决方案是使用date('Ymd'),但更好的是使用时间戳作为time()$unixdue

    【讨论】:

      【解决方案3】:

      使用time函数:

      $msg = "Late";
      
      if( $unixdue > time() ){
      $msg = "Early";
      }
      
      if(date("dmY") === $duestamp){
      $msg = "Today";
      }
      

      这里是where it is documented

      【讨论】:

        【解决方案4】:

        您通过引入 unix 时间戳使您的代码过于复杂,这绝对是不必要的
        并且似乎您必须将完整性检查移至 SQL 查询中。所以

        if     ($query['date_due'] > date("Y-m-d")) echo "Early";
        elseif ($query['date_due'] < date("Y-m-d")) echo "Late";
        else echo "Today";
        

        而且我相信您也可以将此条件移动到查询中

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-06-07
          • 1970-01-01
          • 2019-11-07
          • 1970-01-01
          • 2018-06-17
          • 2011-01-08
          相关资源
          最近更新 更多