2016-06-08 2 views
1

С помощью this question я смог проанализировать строку даты в объекте DateTime, а затем отобразить его в нужном формате. Конструктор DateTime хорошо работает в расшифровке строк DateTime с одним (очень понятным) исключением - он не может отличить dd/mm/YYYY и mm/dd/YYYY.Создание PHP DateTime, когда формат неизвестен

Если я сделать следующее:

$dt = new DateTime("05/03/1900"); // 5th march 1900 
echo $dt->format('Y-m-d'); 

Тогда я получаю следующий результат:

1900-05-03 

Однако оригинальная дата в формате dd/mm/YYYY, поэтому мой выход неверен - теперь у меня есть 3rd May 1900.

Есть ли способ установить DateTime, чтобы предпочесть dd/mm/YYYY более mm/dd/YYYY при анализе строки даты?

Edit: Я зову date_default_timezone_set('Europe/London'); в конструкторе этого класса, но это, кажется, не имеют никакого эффекта. Возможно, это не связано с классом DateTime.

+2

Для часового пояса: 'DateTime :: createFromFormat ('d/M/Y', '05/03/1900' , новый DateTimeZone ('Europe/London')) ; ' – vaso123

+1

Объект DateTime похож на' strtotime() ' Предполагается, что дата - формат США, если вы используете'/'в качестве разделителя и европейца, если вы используете' -' в качестве разделителя. – RiggsFolly

+0

Если формат неизвестен, вы не можете его достоверно разобрать. что сказать, что ваша дата - dd/mm/yyyy или mm/dd/yyyy? «/» Намекает, что это формат США, но ничто не говорит, что это должно быть. это либо пятое, либо 3-е. вы не можете сказать. –

ответ

5

Вы можете использовать DateTime::createFromFormat

$dt = DateTime::createFromFormat('d/m/Y', '05/03/1900'); 
echo $dt->format('Y-m-d'); 
+0

Добавьте часовой пояс, пожалуйста. – vaso123

+0

Это была моя первая попытка перед использованием конструктора 'DateTime'. Однако, похоже, это возвращает логическое значение вместо объекта 'DateTime', поскольку я получаю ошибку:' Fatal error: Call to member function format() on boolean' –

+0

@BrianButterfield Если вы получаете логическое значение, это означает, что функция не работает. Дважды проверьте форматирование, с которым вы проходите, с датой, когда вы проходите, чтобы убедиться, что они одного формата. – Jrod

Смежные вопросы