错误的月份(二月) - DateTime :: createFromFormat

时间:2014-01-31 06:28:49

标签: php

从字符串转换日期会在第二个月(二月)返回错误的值:

$dtformat = 'Y-m-01';
$curDate = DateTime::createFromFormat('Y-m', '1996-02');
print_r($curDate);
$dt     = $curDate->format($dtformat);
echo $dt."\n";

而不是“1996-02-01”,它返回“1996-03-01”。这是$currDate数组:

DateTime Object ( 
    [date] => 1996-03-02 01:19:01 
    [timezone_type] => 3 
    [timezone] => America/New_York 
)

所有其他月份工作正常。我在这里缺少什么?

谢谢!

2 个答案:

答案 0 :(得分:9)

根据此post,这是一个错误。

原因:当我们未向createFromFormat提供日期时,默认情况下将采用今天的日期。所以在这种情况下,1996-02-31将不存在&因此下个月需要。

解决方案:需要提供一天以避免此类情况。

$date = "2011-02";
echo $date."\n";
$d = DateTime::createFromFormat("Y-m-d",$date."-01");
echo $d->format("Y-m");

答案 1 :(得分:2)

尝试使用此代码:

$curDate = DateTime::createFromFormat('Y-!m'), '1996-02');