Почему DateTime :: createFromFormat () терпит неудачу и возвращает логическое значение в моем втором примере?

Когда я запускаю это, первый из них правильно создается в дату. Второй не выполняется, возвращая 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'); 

Код для воспроизведения ошибки

Related of "Почему DateTime :: createFromFormat () терпит неудачу и возвращает логическое значение в моем втором примере?"

Измените 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');