Как сохранить информацию о часовом поясе из строки в формате ISO8601?

Я получаю файлы журнала с меткой времени в формате ISO8601 от устройств в разных часовых поясах. Отфильтровывая такой файл по некоторым значениям, включая временную метку, я мог строить определенные метрики с течением времени. Проблема заключается в том, что временная метка изменяется на часовой пояс сервера, на котором был запущен сценарий, вместо того, что указано в файле журнала.

Вот пример того, что я делаю:

$d = new DateTime();
$d->format('c');
$d->setTimestamp(strtotime("2015-01-19T10:20:24-0500"));
$tz = $d->getTimezone();
echo $tz->getName()."<br/>";
echo $d->format(DateTime::ISO8601)."<br/>";

Если я запускаю этот сценарий на сервере, расположенном в Австралии, вывод показывает:

Australia/Melbourne
2015-01-20T02:20:24+1100

Вместо GMT-5 время показывается в GMT + 11. Любая идея, как сохранить часовой пояс из файла журнала?

Спасибо.

2

Решение

Эта проблема была зарегистрирована в документации: http://php.net/manual/en/datetime.format.php#114366

Пытаться:

<?php
$d = new ...
$d->setTimezone( $d->getTimeZone() );
echo $d->format(DateTime::ISO8601)."<br/>";
?>

Рекомендации:

http://php.net/manual/en/datetime.gettimezone.php

1

Другие решения

Еще раз спасибо, @pyb! Поскольку информация о часовом поясе ранее недоступна, я изменил ее, основываясь на вашем предложении использовать DateTime::createFromFormat (), Вот что я сделал:

$d = date_create_from_format ( "Y-m-d\TH:i:se" , "2015-01-19T10:20:24-0500" );
echo $d->format(DateTime::ISO8601)."<br/>";

Теперь я вижу результат, который я получаю после:

2015-01-19T10:20:24-0500
1

Нашел здесь: http://www.pontikis.net/tip/?id=29

function date_convert($dt, $tz1, $df1, $tz2, $df2) {
// create DateTime object
$d = DateTime::createFromFormat($df1, $dt, new DateTimeZone($tz1));
// convert timezone
$d->setTimeZone(new DateTimeZone($tz2));
// convert dateformat
return $d->format($df2);
}

Примеры
Конвертировать datetime 28/10/2013 02:00:00 в Европе / Афинах в UTC timastamp:

date_convert('28/10/2013 02:00:00', 'Europe/Athens', 'd/m/Y H:i:s', 'UTC', 'YmdHis');
0
По вопросам рекламы [email protected]