从字符串转换回字符串时,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时间戳解决问题并从那里转换为年。
我很想知道这个问题的原因,以及实现预期结果的实现。
答案 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');