【问题标题】:Less than operator not wokking in date小于操作员未在日期工作
【发布时间】:2015-04-29 20:03:06
【问题描述】:

比较日期时小于运算符不工作

   $today="27-02-2015";
$end="24-06-2015";
if($end < $today){
echo "yes";

}else{
echo "no";
}

【问题讨论】:

  • 必须是一个字符串,“27-02-2015”,否则你只是在做数学。此外,它应该包裹在“strtotime”周围。
  • 倒置后仍然无法正常工作
  • PHP - Compare Date 的可能重复项

标签: php


【解决方案1】:

您在此处进行字符串比较,它不会告诉您哪个日期更晚/更早。您可以将这些日期更改为 DateTime 并进行比较

$a = DateTime::createFromFormat('d-m-Y', '27-02-2015');
$b = DateTime::createFromFormat('d-m-Y', '24-06-2015');

if ($b < $a) {
    echo " do something here";
}

【讨论】:

    【解决方案2】:

    将字符串更改为“2015-02-27”的格式 - 然后首先是年份,然后是月份,您可以比较类似的数字

    【讨论】:

      【解决方案3】:

      应该是

      $today=strtotime("27-02-2015");
      $end=strtotime("24-06-2015");
      if($end < $today){
       echo "yes";
      
      }else{
      echo "no";
      }
      

      【讨论】:

      • 产生错误的结果(试一试here;您必须添加此语句date_default_timezone_set ( 'UTC' );)。
      • @collapsar 结果没问题,只是警告。
      • @Forien 谢谢。我错过了“警告......”简介中的实际输出
      【解决方案4】:

      从您的语言环境设置要求的方式指定的字符串构建日期对象并计算纪元毫秒的差异:

      $s_today = '02/27/2015';
      $s_end   = '06/24/2015';
      
      date_default_timezone_set ( 'UTC' );   # required by strtotime. Actual value doesn't matter as you are interested in the date diff only 
      $today = strtotime($s_today);
      $end   = strtotime($s_end);
      
      if ($end < $today)  {
          echo "less ( $s_today < $s_end )";
      } else {
          echo "more ( $s_today > $s_end )";
      } 
      

      注意

      @n-dru 的方法也是可行的。这取决于您的代码片段必须处理的日期规范以及您是否希望对日期执行更多计算。在后一种情况下,我会选择对纪元秒进行标准化。否则它可能不值得麻烦。

      【讨论】:

        猜你喜欢
        • 2012-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-10
        相关资源
        最近更新 更多