在字符串之间转换时,DateTime返回不正确的值

时间:2014-02-11 09:17:27

标签: php datetime datetime-format

从字符串转换回字符串时,PHP返回不正确的DateTime值。

$dss = "Thu May 16 2013"; //Original date string
$dob = DateTime::createFromFormat('D M n Y', $dss);
$dob->format('D M n Y') => "Thu Apr 4 2014"; //Final output date string

使用strtotime时会出现类似问题。正如预期的那样,添加或删除date_default_timezone_set对结果没有影响。

对于我在两个日期之间查找年数的特定用例,使用UNIX时间戳解决问题并从那里转换为年。

我很想知道这个问题的原因,以及实现预期结果的实现。

2 个答案:

答案 0 :(得分:2)

为什么n(一个月的数字表示,没有前导零)?在你的情况下它应该是d作为它的一天,

$dss = "Thu May 16 2013"; 
$dob = DateTime::createFromFormat('D M d Y', $dss);
                                       ^
echo $dob->format('D M d Y'); 

<强> DEMO.

答案 1 :(得分:0)

n是月份编号,而不是月份的日期。 d是这个月的日子。

$dss = "Thu May 16 2013"; //Original date string
$dob = DateTime::createFromFormat('D M d Y', $dss);
echo $dob->format('D M d Y');