Я пытаюсь проанализировать следующую строку:
Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time)
Но я изо всех сил стараюсь найти соответствующий формат, я попробовал:
$date= DateTime::createFromFormat('DM d YH:i:s eO (*)','Thu Oct 03 2013 07:03:41 GMT+0200 (Central Europe Standard Time)'); echo $date->format('Ym-d');
Это приводит к ошибке. Проблема в том, что между GMT + 0200 и скобками нет пробела. Следующие работы просто отлично
$date= DateTime::createFromFormat('DM d YH:i:se O','Thu Oct 03 2013 07:03:41 GMT +0200'); echo $date->format('Ym-d');
Но (очевидно) я должен также проанализировать первый пример. Итак, есть ли у вас какие-либо предположения о том, как должен выглядеть правильный формат?
ошибка, которую я получаю:
Fatal error: Call to a member function format() on a non-object in C:\....
var_dump $ date перед вызовом $ date-> format:
boolean false
Проблема заключается в строке формата, которая должна быть
DM d YH:i:s e+
Я заменил eO
только на e
потому что вход содержит GMT+0200
, у которого нет разделителя между «GMT» и смещением. Я также заменил (*)
часть на +
, который является единственным спецификатором, который может потреблять переменное количество ввода ( *
соответствует одному токену, т. Е. Одному слову – если после этого больше вводится синтаксический анализ).
Обратите внимание, что по-прежнему будет предупреждение из-за использования +
(используйте DateTime::getLastErrors
чтобы увидеть его), но преобразование будет работать правильно.
Вы можете разбить входящую строку. Вот один из способов скининга этого конкретного кота:
$dateString = 'Thu Oct 03 2013 07:03:41 GMT+0200(Central Europe Standard Time)'; \DateTime::createFromFormat('DM d YH:i:s O', explode('(', $dateString)[0]);
См. http://php.net/date для получения дополнительной справки.
Смотрите, как работает .