1

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

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

5 回答 5

5

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

如果你使用,比如说,DD-MM-YYYY格式,它就行不通。同样,如果您使用的是 YYYY-MD 格式(不需要前导零),它也不起作用(因为字符串排序之后)"2010-5-10" "2010-12-10"

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

于 2012-09-11T07:24:21.387 回答
2

因为字符串将按词法逐个字符进行比较。

  • 大于? 2_2
  • 如果不是,0大于0
  • 如果不, ...
于 2012-09-11T07:24:28.180 回答
0

您可以仅直接比较日期,greater then less then或者equal因为它是一个字符串。

只要您YYYY-MM-DD只有格式的日期。因为YYYY-MM-DD将始终以增量格式更改。

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

于 2012-09-11T07:24:33.817 回答
0

你比较字符串。在此操作中,字符串被转换为数字。如果你有 format Y-m-d,它工作得很好,因为首先是年,它是最大值(Y*365 天),然后是月,然后是天。

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

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

于 2012-09-11T07:26:22.003 回答
-1

IT 之所以有效,是因为您正在进行字符串比较,or只要该条件为真,该比较就会在某个条件下工作。

于 2012-09-11T07:26:17.937 回答