Я пытаюсь получить данные даты / времени из базы данных и преобразовать их в строки даты и времени JSON / ISO8601 с добавленным часовым поясом, это продолжение Что определяет (как настроить), какая строка формата используетсяДрайвер php PDO для значений полей даты и времени?
У меня есть следующий тестовый код:
$t1 = '2019-10-10 00:00:00';
$t2 = '1899-12-30 06:10:38';
$t3 = '2019-12-30 06:10:38';
$t4 = '2019-10-10 00:00:01';
$dt1 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t1, new \DateTimeZone('Europe/Tallinn'));
$dt2 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t2, new \DateTimeZone('Europe/Tallinn'));
$dt3 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t3, new \DateTimeZone('Europe/Tallinn'));
$dt4 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t4, new \DateTimeZone('Europe/Tallinn'));
return $dt1->format('Y-m-d\TH:i:sO')."\r\n".$dt2->format('Y-m-d\TH:i:sO')."\r\n".$dt3->format('Y-m-d\TH:i:sO')."\r\n".$dt4->format('Y-m-d\TH:i:sO');
Но результат совершенно непредсказуем:
2019-10-10T00:00:00+0300
1899-12-30T06:10:38+0139
2019-12-30T06:10:38+0200
2019-10-10T00:00:01+0300
Я предоставляю точный часовой пояс (Европа / Таллинн) для каждой из 4 строк даты и времени, но фактический часовой пояс для экземпляров DateTime отличается. Я ожидаю 03 или 02 в каждом случае (я не уверен в использовании эффекта перехода на летнее время), но я явно не могу ожидать 0139. Что здесь происходит?
PHP 7.x.