我很惊讶。我忘了包括 strtotime 但意识到它在任何情况下都有效。为什么这行得通?
if($_POST['active_to'] == '' || $_POST['active_to'] >= '2038-01-19'){
$postproduct->active_to = '2025-07-31';
}else{
$postproduct->active_to = $_POST['active_to'];
}
因为 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"
。两个字符串之间不同的第一个字符恰好按正确的顺序排序。
因为字符串将按词法逐个字符进行比较。
2
_2
0
大于0
?您可以仅直接比较日期,greater then
less then
或者equal
因为它是一个字符串。
只要您YYYY-MM-DD
只有格式的日期。因为YYYY-MM-DD
将始终以增量格式更改。
请记住格式。否则你必须使用strtotime
函数。
你比较字符串。在此操作中,字符串被转换为数字。如果你有 format Y-m-d
,它工作得很好,因为首先是年,它是最大值(Y*365 天),然后是月,然后是天。
在某些情况下,由于月份中的天数不相等等原因,结果可能无效。
参考: http: //php.net/manual/en/language.operators.comparison.php#language.operators.comparison.types
IT 之所以有效,是因为您正在进行字符串比较,or
只要该条件为真,该比较就会在某个条件下工作。