Преобразование часовых поясов в PHP - PullRequest
1 голос
/ 01 марта 2012

У меня есть скрипт, который вводит RSS-каналы, которые приходят из разных часовых поясов.Затем я публикую RSS-каналы с отображением времени в стиле твиттера: «опубликовано около 10 минут назад».Но поскольку я не могу преобразовать это время в свой часовой пояс GMT, на этом дисплее отображается неправильное время, например, сообщение из EST всегда говорит «около 5 часов назад», когда оно новое.

Я искал решения, но ничего не нашелмне кажется, что вы можете сказать мне, где я иду не так.

$dbTimezone = new DateTimeZone($dbStoredTimezone); //$dbStoredTimezone = 'EST'
$dbDate = new DateTime($dbStoredDate, $dbTimezone); //$dbStoredDate = '2012-03-01 05:27:26'
$gmtTimezone = new DateTimeZone('GMT');
echo $gmtTimezone->getOffset($dbDate); //always echo's 0
$offset = DateInterval::createFromDateString ($gmtTimezone->getOffset($dbDate));
$dbDate->add($offset);

1 Ответ

1 голос
/ 01 марта 2012

Кажется, проблема в вашем $gmtTimezone = new DateTimeZone('GMT');.Потому что getOffset() возвращает смещение от GMT (см. Здесь: http://www.php.net/manual/en/datetimezone.getoffset.php). Именно поэтому оно всегда возвращает 0.

. Если вы используете метод DateTime::getOffset(), оно должно работать.

Вот ваш отредактированный код:

<?php
$dbTimezone = new DateTimeZone($dbStoredTimezone); //$dbStoredTimezone = 'EST'
$dbDate = new DateTime($dbStoredDate, $dbTimezone);
echo $dbDate->getOffset();
$offset = DateInterval::createFromDateString ($dbDate->getOffset());
$dbDate->add($offset);

Мой результат -18000.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...