PHP: преобразование часового пояса метки времени

#php #zend-framework #timezone #timestamp

#php #zend-framework #Часовой пояс #временная метка

Вопрос:

У меня возникли проблемы с преобразованием метки времени, которая является датой UTC, в другой часовой пояс с помощью Zend Framework. Мой часовой пояс по умолчанию — Европа / Париж

 $timestamp = 1319530421;
$date = new Zend_Date();
$date->setTimezone('UTC');
$date->set($timestamp, Zend_Date::TIMESTAMP);
echo $date->get(Zend_Date::W3C).' - '.$date->getTimezone().'<br />';
$date->setTimezone('Europe/Paris');
echo $date->get(Zend_Date::W3C).' - '.$date->getTimezone().'<br />';
  

что соответствует

 2011-10-25T08:13:41 00:00 - UTC
2011-10-25T10:13:41 02:00 - Europe/Paris
  

но это неправильно, потому что эта временная метка

 2011-10-25T10:13:41 00:00 - UTC
  

Что я делаю не так? Спасибо

Комментарии:

1. Не могли бы вы прояснить вопрос, пожалуйста. Я не понимаю, что вы считаете неправильным в выводе. Кроме того, есть ли какая-либо особая причина для использования медленного и громоздкого API Zend_Date. Какие функции вы используете, которые не предлагает собственный API DateTime?

2. Я работаю с временными метками. Те, которые хранятся в базе данных, находятся в UTC. Я просто хочу преобразовать их в часовой пояс пользователя. С другой стороны, мне не нужно делать это с помощью Zend_Date. Я просто использую zend framework. Решение PHP действительно для меня.

3. но что не так с датами? 1319530421 действительно 2011-10-25T08:13:41 GMT / UTC. См . codepad.viper-7.com/HxJgeJ или попробуйте с epochconverter.com

4. Затем, я думаю, у меня ошибка при разборе дат. Мой плохой. Спасибо за вашу помощь.

5. нет проблем 🙂 и сделайте себе одолжение и попробуйте собственный API DateTime.

Ответ №1:

Вы ошибаетесь в отношении метки времени в вашем примере. Это дата:

 date_default_timezone_set('UTC');

$timestamp = 1319530421;

echo date('c e', $timestamp); # 2011-10-25T08:13:41 00:00 UTC
  

Так что в вашем примере все правильно, просто ваши ожидания не таковы.