我正在为一个项目编写一段 PHP 代码,该项目将 YYYY-MM-DD 格式的日期与当前日期进行比较,以查看它是否小于当前日期。在代码的不同点,使用了两种不同的方法进行比较。第一个用于get_timestamp()
日期并比较时间戳。在另一个地方,它只是将日期字符串与date("Y-m-d")
. 我的期望是两个日期字符串的比较不会提供正确的响应。但是,当我设置几个测试用例时,我得到了预期的输出。我查看了 PHP 手册的两部分以获得洞察力,但我仍然对为什么在没有转换为时间戳的情况下进行比较感到困惑。
PHP 手册的比较运算符部分指出,字符串要么被转换为数字,然后进行数值比较,要么进行所谓的词法比较。我在词法比较上找不到任何进一步的信息,但是当我阅读有关字符串转换为数字并尝试使用日期字符串的示例时,我尝试的每个日期字符串都得到相同的数字输出。
有人可以帮助我理解为什么大于或小于两个日期字符串的比较有效(或至少似乎有效)吗?我错过了什么?
作为后续,如果它确实有效,我假设将日期转换为时间戳并根据时间戳进行比较是一种更好的做法。将日期转换为时间戳的更好功能是:get_timestamp()
还是strtotime()
?
两个YYYY-MM-DD字符串的小于/大于比较示例代码:
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 字符串的数值的示例代码
$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