Преобразовать формат времени притока в формат ISO8601, используя PHP - PullRequest
0 голосов
/ 06 февраля 2020

При использовании клиента effxdb PHP я вижу этот формат времени:

2020-02-06T17:26:38.277740846Z

PHP Кажется, DateTime не понимает формат:

$date = DateTime::createFromFormat("Y-m-d\TH:i:s.u?",$time);

Я получаю возвращение : False

Как я могу преобразовать это в ISO8601 или в пользовательский формат?

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

DateTime принимает не более 6 цифр для микросекунд. Буква Z представляет часовой пояс. Если лишние цифры удалены, часовой пояс должен быть установлен на Z с 3-м параметром.

$time = '2020-02-06T17:26:38.277740846Z';

$dateTime = DateTime::createFromFormat('Y-m-d\TH:i:s.u???\Z',$time,new DateTimeZone('Z'));

Преобразование объекта DateTime в пользовательский формат тогда очень просто.

echo $dateTime->format("Y-m-d H:i:s.v");
//2020-02-06 17:26:38.277
0 голосов
/ 06 февраля 2020

Поскольку даты PHP не обрабатывают больше микросекунд, вы можете игнорировать оставшуюся часть строки после 6 цифр микросекунд с помощью спецификатора +

Из документации :

+

Если этот спецификатор формата присутствует, конечные данные в строке не вызовут ошибку, а вместо этого будет выдано предупреждение

Использовать DateTime :: getLastErrors (), чтобы узнать, присутствовали ли последние данные.

Если ваши даты всегда заканчиваются на 'Z', вы можете принудительно установить часовой пояс UT C:

$time = '2020-02-06T17:26:38.277740846Z' ;
$date = DateTime::createFromFormat("Y-m-d\TH:i:s.u+", $time, new DateTimeZone('UTC'));
echo $date->format('c'); // 2020-02-06T17:26:38+00:00
...