PHP strottime返回错误的结果

PHP strottime返回错误的结果,php,timestamp,Php,Timestamp,标准时间(2010年1月3日)返回格林尼治时间+5:30的1230993600 而根据,unix时间戳1230993600是2009年1月3日。所以它被取消了一年 它发生在PHP5.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',

标准时间(2010年1月3日)返回格林尼治时间+5:30的1230993600

而根据,unix时间戳1230993600是2009年1月3日。所以它被取消了一年


它发生在PHP5.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

如果月份后有逗号,则假定2010年是军事时间,而不是年份。如果你想把2010年解释为一年,可以省略逗号。

strotime()不是绝对正确的。它是一个上下文解析器,试图将日期的英文描述转换为时间戳。您使用的格式似乎不适合进行正确的分析

您可以在以下示例中看到差异:

echo strtotime('3rd January,2010')."<BR>";
echo strtotime('3 January, 2010')."<BR>";
echo strtotime('January 3rd, 2010')."<BR>";
echo strtotime('January 3, 2010')."<BR>";
前两个返回的时间戳与后两个不同。在这些格式中,最后两种在语义(英语方面)更为正确,我将尝试使用它们

编辑

正如其他海报所指出的,由于日期标记的顺序,逗号使解析器混淆了日期部分

echo strtotime('3rd January 2010')."<BR>";
echo标准时间(2010年1月3日)。“
”;

返回格式的正确时间戳。

WFM on PHP 5.2.10-2ubuntu6.3:
echo strotime('2010年1月3日')
返回
1231009800
实际上,根据该站点,unix时间戳1230993600是01/03/09@8:40:00am。回答得很好。只需添加一点信息:当strotime()无法解析年份时,它会使用当前年份(即2009年),就像它没有被指定一样。但是为什么它会与2009一起工作呢?此外,第一种格式是完全有效的格式。这应该是例外的答案。感谢您提供了对正在发生的事情的理解,而不是“在它起作用之前改变它”的方法。
echo strtotime('3rd January 2010')."<BR>";