Я создаю форум, который также хранит время отправки сообщения, и мне нужно преобразовать его в часовой пояс пользователя.Теперь база данных MySQL хранит время с UTC_TIMESTAMP()
(в столбце с типом DATETIME
), и я создал небольшую функцию из кода на http://www.ultramegatech.com/blog/2009/04/working-with-time-zones-in-php/ для преобразования времени в часовой пояс пользователя.Это функция:
function convertTZ($timestamp, $tz='UTC', $format='d-m-Y H:i:s') {
// timestamp to convert
$timestamp = strtotime($timestamp);
// the time formatting to use
$format = $format;
// the time zone provided
$tz = $tz;
// create the DateTimeZone object for later
$dtzone = new DateTimeZone($tz);
// first convert the timestamp into an RFC 2822 formatted date
$time = date('r', $timestamp);
// now create the DateTime object for this time
$dtime = new DateTime($time);
// convert this to the user's timezone using the DateTimeZone object
$dtime->setTimeZone($dtzone);
// print the time using your preferred format
$time = $dtime->format($format);
return $time;
}
И я сделал тестовую страницу в http://assets.momo40k.ch/timezones.php.
Теперь, когда я вставляю сообщение в базу данных, скажем, 11:50
в моем часовом поясе (то есть Europe/Rome
), оно вставляет в UTC 09:50
, что является правильным, согласно некоторым онлайн-конвертерам часовых поясов.Но когда я пытаюсь преобразовать его обратно в Europe/Rome
с помощью функции convertTZ()
, он возвращает 09:50
, как если бы Europe/Rome
было UTC.Если я попытаюсь преобразовать его в часовой пояс GMT + 2: 00, он вернет 10:50
.Может кто-нибудь угадай, почему это так?PS: я не использую функцию CONVERT_TZ()
SQL
, потому что мой сервер не поддерживает именованные часовые пояса, поэтому эта функция - мой обходной путь.