RE ответ Желько Живковича, дескрипторы часовых поясов, такие как «Европа / Лондон», работают, только если администратор mySQL добавил таблицы часовых поясов в систему и поддерживает их в актуальном состоянии.
В противном случае вы ограничены числовыми смещениями, такими как '-4: 00'. К счастью, формат php date ('P') обеспечивает его (по состоянию на 5.1.3)
Так, скажем, у вас может быть файл конфигурации приложения
define('TZ', 'US/Pacific');
....
if (defined('TZ') && function_exists('date_default_timezone_set')) {
date_default_timezone_set(TZ);
$mdb2->exec("SET SESSION time_zone = " . $mdb2->quote(date('P')));
}
Это означает, что PHP и MySQL согласятся, какой часовой пояс использовать.
Всегда используйте TIMESTAMP для хранения значений времени . Столбец фактически сохраняется как UNIX_TIME (эпоха), но неявно преобразуется из текущего смещения часового пояса при записи и обратно при чтении.
Если вы хотите отображать время для пользователей в других часовых поясах, то вместо глобального определения () установите их данный часовой пояс в приведенном выше. Значения TIMESTAMP будут автоматически преобразованы mySQL к тому моменту, когда ваше приложение увидит набор результатов (что иногда может быть проблемой, если вам действительно нужно знать исходный часовой пояс события, тогда он должен находиться в другом столбце)
, а также, «почему бы не хранить все разы как целые числа», это лишает вас возможности сравнивать и проверять даты и означает, что вам всегда приходится преобразовывать в представление даты в приложении уровень (и это плохо для глаз, когда вы смотрите на данные напрямую - быстро, что случилось в 1254369600?)