【问题标题】:Compare current date with a date in d/mm/yyyy format in PHP将当前日期与 PHP 中 d/mm/yyyy 格式的日期进行比较
【发布时间】:2011-12-05 14:44:25
【问题描述】:

检查给定日期 - 字符串 d/mm/yyyy 是否为过去的最佳方法是什么? 当我使用 strtotime() 时,由于非美式表示法,它不能很好地工作。 当然,我可能会将日期作为字符串处理并比较子字符串,但必须有更好的方法。

if((strtotime('now')-strtotime($date)) > 86400) echo $date;

【问题讨论】:

    标签: php string date strtotime


    【解决方案1】:

    strtotime('now') 是对该功能的可怕滥用。您应该只使用 time() 来获得完全相同的结果,而无需任何 strtotime 开销。

    $thatTime = date_create_from_format('d/m/Y', $date)->getTimestamp();
    if (time() - $thatTime > 86400) echo $date;
    

    date_create_from_format() 的相关文档

    【讨论】:

    • 已编辑以包含一个 ->getTimestamp() 调用,没有它就不起作用(不能从 int 中减去 DateTime)。支持者,请不要盲目投票(我在编辑后投了我的票)。
    【解决方案2】:

    m/d/y 或 d-m-y 格式的日期可以通过查看来消除歧义 各个组件之间的分隔符:如果分隔符是 斜线 (/),则假定为美式 m/d/y;而如果 分隔符是破折号 (-) 或点 (.),然后是欧洲 d-m-y 格式 是假定的。

    strtotime()手册

    所以一个简单的str_replace('/', '-', $date) 应该可以解决问题。

    【讨论】:

      【解决方案3】:

      那么显而易见的答案是像这样重新格式化字符串:

      $parts = explode('/',$dateStr);
      if ((time() - strtotime("$parts[2]-$parts[1]-$parts[0]")) > 86400) {
        // do stuff
      }
      

      编辑

      但是,Marc B 的答案更好,所以这样做。

      【讨论】:

        【解决方案4】:

        如果您正在运行 >PHP5,则可以解决问题:

        function in_past($date) {
            $date = explode("/", $date);
            $now = time();
            $date = strtotime($date[1]."/".$date[0]."/".$date[2]);
            return $date < $now;
        }
        

        类似:

        $old_date = "23/01/1985";
        if (in_past($old_date))
            echo 'so last season';
        else 
            echo 'future';
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-25
          • 1970-01-01
          相关资源
          最近更新 更多