Преобразовать временную метку атома с часовым поясом в php - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть данные json, которые содержат временные метки в формате атома. Некоторые примеры временных отметок: 2020-04-12T04: 05: 08.92949232Z
2020-03-24T22: 59: 13.447142853 + 01: 00

Я пытаюсь преобразовать их с помощью 'date ("Ymd g: i: s ", strtotime ($ atom) ', но, похоже, возникают проблемы с форматом + timezone.
Он отлично работает с $ atom =" 2020-04-12T04: 05: 08.92949232Z ".
Но если $ atom = "2020-03-24T22: 59: 13.447142853 + 01: 00", я получу 1970-01-01 12: 00: 00.

Я поиграл с DateTime :: createFromFormat но я просто не могу заставить его работать. Можно ли разобрать без особых усилий или мне нужно пристрелить парня, создающего файлы json?

1 Ответ

0 голосов
/ 13 апреля 2020

DateTime вызывает проблемы, если после периода более 6 цифр. Вы должны ограничить цифры максимум до 6 после десятичной точки, тогда выражения будут приняты.

$strDate = '2020-03-24T22:59:13.447142853+01:00';

//reduce microseconds to a maximum of 6
$strDate = preg_replace_callback('~\.\d{7,}~',function($match){
      return ltrim(sprintf('%0.6F',$match[0]),'0');
},$strDate);


$d = date_create($strDate);
var_dump($d);
//object(DateTime)#2 (3) { ["date"]=> string(26) "2020-03-24 22:59:13.447143" ["timezone_type"]=> int(1) ["timezone"]=> string(6) "+01:00" }
...