Есть 2 ключа для работы с часовыми поясами:
Храните все свои дату / время в одном часовом поясе (может быть в любом часовом поясе, но использование UTC действительно упрощает вещи.)
Решите, где в вашем приложении будут конвертироваться дата / время в / из часового пояса хранения в пользовательский часовой пояс отображения. Это можно сделать на уровне абстракции базы данных, в коде приложения или в шаблонах страниц (в основном, в любой части стека MVC). Важно быть последовательным.
Также помните, что php имеет собственную настройку часового пояса, независимую от MySQL. Если вы используете php> 5.1, вы можете изменить часовой пояс php во время выполнения, используя date_set_default_timezone ().
Если вы решите выполнить преобразование часового пояса при получении / хранении информации в базе данных, функция convert_tz () MySQL станет вашим новым лучшим другом.
Для меня было проще всего выполнить преобразование часовых поясов как часть шаблонов страниц. Дата / время сохраняются в базе данных в часовом поясе UTC, а вся логика приложения также в UTC. При выводе даты в HTML я использую функцию-обертку для php date () для вывода даты в часовом поясе пользователя:
function getTimezoneOffset($time, $timezone)
{
$t = new DateTime(date('Y-m-d H:i:s', $time));
$tz = new DateTimeZone($timezone);
$t->setTimeZone($tz);
return $t->getOffset();
}
function myDate($timezone, $format, $timestamp=false)
{
if (!$timestamp) $timestamp = time();
return date($format, $timestamp+getTimezoneOffset($timestamp, $timezone));
}
Аналогичным образом, при получении ввода от пользователя через формы сначала выполните преобразование часового пояса, чтобы ваше приложение работало с датой / временем UTC.
Другим вариантом является использование PostgreSQL - в отличие от MySQL он имеет встроенную поддержку часовых поясов.