Временные пояса и отображение правильного времени

Рейтинг: 0Ответов: 1Опубликовано: 18.11.2014

На сервере стоит дефолтный временной часовой пояс.
Когда пользователь регистрируется - определяется его часовое смещение.
При публикации пользователем информации высчитывается его настоящее время с учетом его зафиксированного смещения:

Например:

-120 - 2 часа разница
+120 - на 2 часа больше

Сложность:
При публикации пользователем для контента фиксируется время, определенное заданным смещением часового пояса пользователя. Например:

Киев - 19:00,  Москва - 20:00

Человек из Киева публикует новость в 19:00, после чего человек из Москвы видит, что новость опубликована не в 20:00, а в 19:00 по киевскому. А должно отобразиться 20:00 с учетом часового пояса текущего пользователя.

Какие есть идеи?

Ответы

▲ 3Принят

Не используйте "смещения". Вам мало того, что в данный момент твориться с часовыми поясами в России? Плюс, в некоторых странах смещение не является целым числом часов (например, для Индии смещение будет кратное половине часа, а для некоторых стран даже кратным 15 минутам).

Поэтому правильно делать так. В базе хранить время в utc. А вот для каждого пользователя выводить, учитывая его часовой пояс.

Правда, в случае php этот вариант имеет один нюанс. Многие провайдеры не до конца обновляют файл tzdata (с данными о часовых поясах) и в результате php живет своей жизнью. Но рецепт от этого есть, и, к счастью, эта проблема касается только тех стран, которые активно меняют свой часовой пояс. Но как только выкатите нормальный файл, большинство дат нормализируется.