Я твердо верю, чтоследует избегать, когда имеется формат.
$from_format = 'Y-m-d H:i:s';
$to_format = 'd M, Y h:i:s A';
$date = '2016-11-11 14:26:03';
echo DateTime::createFromFormat($from_format, $date)->format($to_format);
Выходы:
11 Nov, 2016 02:26:03 PM
Почему ваш код не я не могу сказать наверняка, что работает отлично здесь, но вы можете диагностировать немного. Я предполагаю в вашем случае, потому что strtotime()
не удалось преобразовать, возвращая -62169984000
, что на самом деле 0000-00-00 00:00:00
, но из-за секунды, минуты, дня и месяца, которые не разрешены быть 0
, происходят расчеты, приводящие к 0000-00-00 00:00:00
минус 1 день и 1 месяц , и т. д. 30 Nov -0001 12:00:00
, так что, похоже, ваш $obj->suspend_datetime
не содержит правильных данных.
Я написал 2 маленьких функций, чтобы поделиться, что бы сделать все это испытание легче обращаться:
function strtodatetime($date, $format = 'Y-m-d H:i:s'){
return ($d = DateTime::createFromFormat($format, $date)) && $d->format($format) == $date ? $d : false;
}
function strtounixtime($date, $format = 'Y-m-d H:i:s'){
return ($d = DateTime::createFromFormat($format, $date)) && $d->format($format) == $date ? $d->getTimestamp() : 0;
}
echo ($dt = strtodatetime($date)) ? $dt->format($to_format) : 'invalid format';
echo date('d M, Y h:i:s A', strtounixtime($obj->approve_datetime));
В вашем сценарии, используя strtounixtime()
(лучше strtotime()
) было бы перевести обратно в unix epoch, если он терпит неудачу.
см. Этот http://php.net/manual/en/function.date.php#refsect1-function.date-parameters – Karthi
его, потому что различный формат по умолчанию между базой данных и sql –