PHP strtotime返回错误结果
strtotime('2010年1月3日')在GMT + 5:30返回1230993600。PHP strtotime返回错误结果
虽然根据this,unix时间戳1230993600是1月3日,。所以它关闭了一年。
它发生在PHP 5.2.6以及5.2.11上。
问题是日期字符串中的,
。这似乎是分开在字符串中的时间元素日期,
echo date('Y-m-d H:i:s', strtotime('3rd January, 2010'));
回报
2009-01-03 20:10:00
而
echo date('Y-m-d H:i:s', strtotime('3rd January 2010'));
(,
删除)返回正确日期:
2010-01-03 00:00:00
W如果你在这个月之后有一个逗号,它假定2010年是军事时间而不是年份。如果您希望它将2010年解释为年份,请省略逗号。
strtotime()是不可靠的。它是一种上下文解析器,它试图将日期的英文描述转换为时间戳。您使用的格式似乎不适合正确解析。
你可以看到差异将在下面的例子:
echo strtotime('3rd January,2010')."<BR>";
echo strtotime('3 January, 2010')."<BR>";
echo strtotime('January 3rd, 2010')."<BR>";
echo strtotime('January 3, 2010')."<BR>";
结果:
1231042200
1231042200
1262505600
1262505600
前两回不同的时间戳比最后两位。在这两种格式中,后两种语义(英语方面)更正确,我会尝试使用它们。
编辑
正如其他海报指出,逗号混淆了日期部分解析器因您的日期标记的顺序。
echo strtotime('3rd January 2010')."<BR>";
为您的格式返回正确的时间戳。
非常好的答案。只是添加一些信息:当strtotime()未能解析年份时,它使用当前年份(即2009年),就像它没有被指定一样。 – Savageman 2009-12-10 22:35:29
但为什么它与2009年一起工作?此外,第一种格式是完全有效的格式。 – understack 2009-12-10 22:36:09
好的,Savageman回答。 – understack 2009-12-10 22:36:43
PHP 5.2.10-2ubuntu6.3上的WFM: 'echo strtotime('3rd 3rd,2010');'returns'1231009800' – 2009-12-10 22:29:41
其实,根据那个网站,unix时间戳1230993600是01/03/09 @上午8点40分。 – 2009-12-10 22:30:44