Pull to refresh

Comments 8

Здесь неплохо бы смотрелся кат
Ссылки на официальную документацию в статье есть. То, на что дали ссылку вы — перевод официального мануала.
Здесь могла бы быть ваша реклама.
Спасибо, именно в данный момент мне это интересно :)
Вот только обычно пользователи X и Y, которые находятся в разных таймзонах, работают через один веб-интерфейс, который вместе с базой находится в третьей таймзоне. И без DATETIME тут уже сложно обойтись.
Еще нужно не забывать о смене на летнее/зимнее время.
>> Вот только обычно пользователи X и Y, которые находятся в разных таймзонах, работают через один веб-интерфейс, который вместе с базой находится в третьей таймзоне."

Похоже, вы плохо читали. Скажите, какая разница, в какой тайм-зоне находится сервер, если время хранится в UTC/GMT+0? Никакой. А веб-интерфейс тут вообще не причем, установка зоны для каждого пользователя будет происходить в базе после коннекта, в скрипты все даты/время будут приходить уже приведенные к зоне пользователя.

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

// устанавливаем таймзону пользователя, чтобы все функции времени отдавали время правильно
date_default_timezone_set($user->getTimeZone());

// получаем объект класса DateTimeZone для зоны пользователя
$tz = new DateTimeZone($user->getTimeZone());

// получаем текущий офсет времени в секундах от UTC/GMT+0 (здесь летнее время уже учтено)
$tzOffset = $tz->getOffset(new DateTime('now', new DateTimeZone('UTC')));

// строим строку в формате, который понимает мускуль (летом для москвы +04:00, зимой — +03:00)
$sign = $tzOffset < 0? '-': '+';
$tzOffset = $sign. str_pad(floor($tzOffset / 3600), 2, '0', STR_PAD_LEFT). ':'. str_pad(floor($tzOffset % 3600 / 60), 2, '0', STR_PAD_LEFT);

// устанавливаем правильный отступ для текущего подключения (далее юзается только это подключение)
$this->db->Query('SET time_zone = "'. $tzOffset. '"');

Если у вас не PHP, то ищите механизмы перевода времени в своем языке и передавайте мускулю правильный отступ.
Спасибо огромное, единственная статья на эту тему (на хабре), из которой всё стало ясно.
Sign up to leave a comment.

Articles