【问题标题】:PHP compare date without strtotimePHP比较没有strtotime的日期
【发布时间】:2012-09-11 07:21:22
【问题描述】:

我很惊讶。我忘了包括 strtotime 但意识到它在任何情况下都有效。为什么会这样?

    if($_POST['active_to'] == ''  || $_POST['active_to'] >= '2038-01-19'){
        $postproduct->active_to = '2025-07-31';
    }else{
        $postproduct->active_to = $_POST['active_to'];
    }

【问题讨论】:

  • 比较字符串,有什么异常吗?它有效,因为您的时间格式是 Y-m-d ...
  • 如果您想进行简单的比较,请使用DateTime

标签: php string date strtotime


【解决方案1】:

因为 YYYY-MM-DD 格式在使用字符串比较时,恰好排序顺序相同。

如果您使用 DD-MM-YYYY 格式,它就不会起作用。同样,如果您使用的是 YYYY-M-D 格式(不需要前导零),它也不起作用(因为"2010-5-10" 在字符串排序中 "2010-12-10" 之后出现)。

"2010-10-05" 大于"2000-10-05" 不是因为2010 > 2000,而是因为"20" = "20""1" > "0"。两个字符串之间不同的第一个字符恰好按正确的顺序排序。

【讨论】:

  • 我很快就知道了,很快就忘记了这篇文章,但对有用的答案感到震惊。非常感谢。
【解决方案2】:

因为字符串会逐个字符地进行词法比较。

  • 2 是否大于2
  • 如果不是,0 是否大于0
  • 如果没有,...

【讨论】:

    【解决方案3】:

    您只能直接比较 greater then less thenequal 的日期,因为它是一个字符串。

    只要您只有YYYY-MM-DD 格式的日期。因为YYYY-MM-DD 总是以增量格式变化。

    请记住格式。否则你必须使用strtotime函数。

    【讨论】:

      【解决方案4】:

      你比较字符串。在此操作中,字符串被转换为数字。如果您的格式为Y-m-d,则效果很好,因为首先是年,这是最大值(Y*365 天),然后是月,然后是天。

      在某些情况下,由于月份中的天数不相等等原因,结果可能无效。

      参考:http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.types

      【讨论】:

        【解决方案5】:

        IT 之所以有效,是因为您正在进行字符串比较,只要该条件为真,该字符串比较将适用于 or 条件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多