Когда я запускаю это, первый из них правильно создается в дату. Второй не выполняется, возвращая boolean
и поэтому я не могу форматировать. Является ли время вне диапазона?
//works correctly $startDate = "2015-05-06 10:49:20.637133"; $start = DateTime::createFromFormat('Ymd h:m:s.u',$startDate); echo $start->format('m/d/y'); //doesn't work correctly $startDate = "2015-05-12 15:49:06.821289"; $start = DateTime::createFromFormat('Ymd h:m:s.u',$startDate); echo $start->format('m/d/y');
Код для воспроизведения ошибки
Измените h
на большой H
, так как маленький – 12-часовой формат, а большой – 24-часовой формат.
Вы можете увидеть все форматы в руководстве . И цитата оттуда:
h 12-часовой формат часа с ведущими нулями от 01 до 12
H 24-часовой формат часа с ведущими нулями от 00 до 23
Значит прямо сейчас ваш код выходит из строя, потому что в 12-часовом формате отсутствует 15.
Check DateTime::getLastErrors()
:
php > var_dump(DateTime::createFromFormat('Ymd h:m:s',"2015-05-12 15:49:06")); bool(false) php > var_dump(DateTime::getLastErrors()); array(4) { ["warning_count"]=> int(1) ["warnings"]=> array(1) { [19]=> string(27) "The parsed date was invalid" } ["error_count"]=> int(1) ["errors"]=> array(1) { [11]=> string(30) "Hour can not be higher than 12"
В дополнение к другим ответам, для стандартных форматов, понятых DateTime
вам не нужно создавать из формата:
$startDate = "2015-05-12 15:49:06.821289"; $start = new DateTime($startDate); echo $start->format('m/d/y');