RFC 3339 как сделать dateTime из
Я пытаюсь отформатировать дату, переданную из Api google plus, как говорится в руководстве в формате RFC 3339:
опубликовано - > datetime - > время, когда это действие было первоначально опубликовано. В виде типа timestamp в RFC 3339.
Итак, по документации php я обнаружил, что:
DATE_RFC3339 Так же, как DATE_ATOM (начиная с PHP 5.1.3)
и что оба формата что-то вроде:
"Y-m-dTH: i: sP"
На самом деле выход api Google-это что-то вроде:
2014-01-22T10:36: 00.222 Z
когда я пытаюсь запустить команду типа:
$date = DateTime::createFromFormat("Y-m-dTH:i:sP", $activity['published']); //$activity['published'] contain the date
Я всегда FALSE
Как вернуть.
На мой взгляд, проблема в заключительной части
.222Z
любое предложение будет оценено перед резать его некоторым рудиментарным подходом...
2 ответов
вам не нужно использовать DateTime::createFromFormat()
для стандартных входов. Просто используйте:
$date = new DateTime('2014-01-22T10:36:00.222Z');
var_dump($date);
но если вы все еще настаиваете на использовании createFromFormat (), используйте правильный формат с микросекундами:
$date = DateTime::createFromFormat('Y-m-d\TH:i:s.uP', '2014-01-22T10:36:00.222Z');
var_dump($date);
есть трюк. Существует специальная константа DATE_RFC3339 ment, чтобы помочь, но он не работает, если последний символ "Z" - что отлично подходит для . На самом деле JSON будет указывать такой формат:
expected format YYYY-MM-DDThh:mm:ssZ or YYYY-MM-DDThh:mm:ss+hh:mm
но с помощью этого DATE_RFC3339 вы можете получить сообщение об ошибке от PHP:
InvalidArgumentException: The timezone could not be found in the database
вот почему нам нужно указать формат вручную:
С DateTime
$date = DateTime::createFromFormat ( 'Y-m-d\TH:i:s.u\Z' ,$time);
С Углеродом:
\Carbon\Carbon::createFromFormat('Y-m-d\TH:i:s.u\Z',$time);