Преобразование даты из строки возвращает неверные значения для второго месяца (февраль):
$dtformat = 'Ym-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 )
Все остальные месяцы работают нормально. Что мне здесь не хватает?
Благодаря!
Это ошибка в соответствии с этим сообщением .
Причина. Когда мы не createFromFormat
дату для createFromFormat
по createFromFormat
она будет createFromFormat
сегодняшней. Так что в этом случае это будет 1996-02-31
которого не существует, и, следовательно, это займет следующий месяц.
Решение. Необходимо обеспечить день, чтобы избежать такого сценария.
$date = "2011-02"; echo $date."\n"; $d = DateTime::createFromFormat("Ymd",$date."-01"); echo $d->format("Ym");
Попробуйте с помощью этого кода:
$curDate = DateTime::createFromFormat('Y-!m'), '1996-02');