从字符串转换日期会在第二个月(二月)返回错误的值:
$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
)
所有其他月份工作正常。我在这里缺少什么?
谢谢!
答案 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');