В связи с предстоящим переводом часов на 1 час назад/вперед в ночь с субботы на воскресенье мне и Ивану приходят одни и те же вопросы от организаторов/участников Encounter, что то типа:
Как будет произведен переход? Как поведет себя движок? Как будет расчитывать время до подсказок и т.д. и т.п.Вот на эти вопросы я тут и отвечу, а то надоело всем писать одно и тоже.
Для начало прочтите внимательно, что такое
UTC и
GMTНа сервере выставлено UTC время, это время не смещается ни зимой ни летом. Все времена в базе хранятся в UTC, и наш движок работает внутри только с UTC временем. Игровой механизм не знает про то, что будет перевод часов. Он просто всегда отдает UTC время.
А уже непосредственно перед тем как отобразить это время в браузер, мы локализуем его в соответствии с временной зоной текущего сайта.
Вот пример расчетов для Москвы.Каждая временная зона имеет интервал "Начало летнего времени" и "Конец летнего времени".
Daylight Saving Time
started on воскресенье 25 март 2007 г. 02:00 local standard time
Daylight Saving Time
ends on воскресенье 28 октябрь 2007 г. 03:00 local daylight time
Мы смотрим если дата/время попадает в этот интервал, то мы прибовляем +4 часа, если не попадает, то +3 часа. И отображаем это время вам в браузер.
Конечно, в статистике может получится так, что отобразится два раза 2:30, но это не должно вас пугать, вы должны понимать, что сначало было 2:30 UTC +4, а через час стало 2:30 UTC +3.