Why does a less than or more than comparison in PHP of two strings in the date format of “YYYY-MM-DD” work even though they are strings?
我正在为一个项目编写一段PHP代码,该项目将一个YYYY-MM-DD格式的日期与当前日期进行比较,以查看它是否小于当前日期。在代码的不同点,使用了两种不同的方法进行比较。第一个在日期上使用
PHP手册的比较运算符部分指出,字符串要么被转换为数字,然后进行数值比较,要么进行所谓的词汇比较。在词汇比较方面,我找不到任何进一步的内容,但是当我读到字符串转换为数字的内容,并尝试使用日期字符串的示例时,我得到的每个日期字符串的数字输出都是相同的。
有人能帮助我理解为什么两个日期字符串的大于或小于比较有效(或者至少看起来有效)?我错过了什么?
作为后续工作,如果它确实有效,我假设将日期转换为时间戳并根据时间戳进行比较是更好的做法。将日期转换为时间戳的更好功能是:
两个YYYY-MM-DD字符串的小于/大于比较的示例代码:
1 2 3 4 5 | if ("2013-06-27" <"2013-06-28") { echo"less"; } // Output: less if ("2013-06-27">"2013-06-28") { echo"more"; } // Output: (none) if ("2013-06-29" <"2013-06-28") { echo"less"; } // Output: (none) if ("2013-06-29">"2013-06-28") { echo"more"; } // Output: more |
测试转换的YYYY-MM-DD字符串的数值的示例代码
1 2 3 4 5 6 | $foo = 1 +"2013-06-27"; echo"\$foo==$foo"; // Output: $foo = 2014 $foo = 1 +"2013-06-28"; echo"\$foo==$foo"; // Output: $foo = 2014 $foo = 1 +"2013-06-29"; echo"\$foo==$foo"; // Output: $foo = 2014 |
当你这样比较一个字符串时,它将从左到右,并比较给定字符串中的每个字符,看看它们是否不同,直到它发现不同为止,然后它将通过比较最后一个字符的ASCII值来决定哪个字符串更大。巧合的是,由于您只使用数字,所以ASCII表中的最高数字也更高。
只要在比较中只使用数字,并且每个字符串的字符数相同,此解决方案就可以工作。
还要注意,这只在您使用YYYY-MM-DD格式时有效,如果您使用其他格式,它将不起作用。
使用