[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запутался с часовыми поясами
remenikomer
На DLE есть функционал поясов. Пользователи сами настраивают. Но я сделал свой модуль. Теперь опомнился о поясах.
Но понять принцип их работы никак не могу. Кучу всего перечитал, а толку ноль.
Например, есть два пользователя: 1 пользователь из Калининграда (+2), 2 пользователь из Новосибирска (+6). Сервер находится в Москве (+3).
2-й написал пост. Что в базу сохранять, какое время?
1-й - это модератор. Ему какое время выводить?
2-й читает посты. Какое время в постах выводить?

Я так понимаю, все сохраняется по времени сервера. А перед выводом нужно устанавливать таймзон из настроек юзера. Правильно?

И еще... в даты хранятся в разных форматах (разные типы записей, действий) - так надо было...
т.е. timestamp и datatime.
Соответственно, разумный, наверно, вопрос. Что делать со временем datetime - 2016-01-15 10:01:57, как их модифицировать для пользователей с учетом пояса?

Подскажите, пожалуйста, алгоритм работы скрипта, обработки данных.
AllesKlar
Фигач по Гринвичу.

Цитата (remenikomer @ 10.02.2017 - 21:43)
И еще... в даты хранятся в разных форматах (разные типы записей, действий) - так надо было...


так НЕ надо было.

Поэтому
Цитата (remenikomer @ 10.02.2017 - 21:43)
Что делать со временем datetime - 2016-01-15 10:01:57, как их модифицировать для пользователей с учетом пояса

страдать, писать костыли и больше никогда так не делать.

_____________
[продано копирайтерам]
remenikomer
Цитата (AllesKlar @ 11.02.2017 - 00:34)
так НЕ надо было.

Сначала сделал datetime, но потом переделал в timestamp некоторые поля. Некоторые оставил, т.к. выводятся для информации, действий никаких не делается с ними.
Цитата (AllesKlar @ 11.02.2017 - 00:34)
Фигач по Гринвичу.

Дак вопрос и звучит - как?
Миша
TIMESTAMP

_____________
Принимаю заказы, писать в ЛС
remenikomer
Цитата (Миша @ 11.02.2017 - 06:24)
TIMESTAMP

и как это решает мой вопрос?
killer8080
Цитата (remenikomer @ 10.02.2017 - 23:43)
Например, есть два пользователя: 1 пользователь из Калининграда (+2), 2 пользователь из Новосибирска (+6). Сервер находится в Москве (+3).

Неправильный подход, нельзя работать с офсетами, нужно работать с зонами в формате IANA, например для Москвы Europe/Moscow. Надеюсь не нужно объяснять почему?

Цитата (remenikomer @ 10.02.2017 - 23:43)
2-й написал пост. Что в базу сохранять, какое время?

Всегда UTC, для DATETIME конвертировать в PHP (gmdate()), или выставлять time_zone перед вставкой, если используешь функционал субд для работы со временем. Для TIMESTAMP со вставкой времени заморачиваться не нужно, просто now(). Этот тип всегда в UTC, вне зависимости от настроек.

Цитата (remenikomer @ 10.02.2017 - 23:43)
1-й - это модератор. Ему какое время выводить?

Естественно выводить время в часовом поясе юзера.

Цитата (remenikomer @ 10.02.2017 - 23:43)
2-й читает посты. Какое время в постах выводить?

аналогично, сделай чтоб юзеры могли в своем профиле указывать свою TZ, для анонимов если нужно через куки.

Цитата (remenikomer @ 10.02.2017 - 23:43)
Я так понимаю, все сохраняется по времени сервера.

Не факт, зависит от конфигурации, по умолчанию мускул использует системную зону.

Цитата (remenikomer @ 10.02.2017 - 23:43)
А перед выводом нужно устанавливать таймзон из настроек юзера. Правильно?

правильно

Цитата (remenikomer @ 10.02.2017 - 23:43)
Соответственно, разумный, наверно, вопрос. Что делать со временем datetime - 2016-01-15 10:01:57, как их модифицировать для пользователей с учетом пояса?

Если бы ты изначально хранил DATETIME в UTC, проблем бы не было, а так придётся заморочиться с добавлением поля timestamp, и копированием туда времени из datetime поля.

Главный вопрос, насколько сильно всё запущено rolleyes.gif
Цитата (remenikomer @ 10.02.2017 - 23:43)
Сервер находится в Москве (+3).

С какого периода записи в БД? Уточняй и смотри какие переходы были в этот период. Если даты до 2012 года (не помню точных дат), то придётся парится с DST, с 2012 по 2014 в Москве был пояс +4, с 2014 +3. В общем чем древнее даты тем больше костылей smile.gif

PS тут не давно был холиварчик по работе со временем ph34r.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.