@kirill-93

Как показывать пользователю данные в его временной зоне и нужно ли?

На сервере время стоит по UTC. У всех сущностей время создания измеряется в timestamp и передается пользователю в браузер в виде timestamp, а у пользователя на компьютере уже преобразуется в дату и время. Таким образом, каждый пользователь видит дату и время, согласно своему часовому поясу.
Но есть еще функционал графиков за 7 дней.
select count(*) as total, date
from events
where events.created_at > interval - 1 week
group by date

И вот тут у меня 2 вопроса:
1) Сервер генерирует список за 7 дней по своему серверному времени. У пользователя 2 часа ночи 12 апреля, а на сервере еще 23:00 11 апреля. Как в таком случае показывать данные с учетом Ч.П. пользователя, ведь они формируются на сервере?
2) Второй вопрос правильно ли это и нужно ли? Правильно ли каждому пользователю показывать графики в его часовом поясе или понятнее и лучше показать график и написать, что данные по UTC, а пользователь пусть сам считает?

К решению первого вопроса у меня только один вариант в голове. В браузере есть Date.getTimezoneOffset, которая возвращает количество минут от UTC. Это значение передавать на сервер и суммировать перед выборкой.
  • Вопрос задан
  • 239 просмотров
Пригласить эксперта
Ответы на вопрос 2
1. Дату на графиках подписывать в часовом поясе юзера. Если они показываются именно что за последние N дней, то для конечного юзера такие нюансы будут в любом случае незаметны. Если же юзер выбирает произвольный интервал, тогда уже конвертировать.
Советую выбрать один формат хранения времени и по максимуму его использовать, чтобы уменьшить кол-во мест, где производится конвертация
А также саму конвертацию вынести в отдельную функцию, даже если она используется в 1 месте — в будущем будет проще поменять
2. Зависит от характера данных и задачи, по тому что описано в вопросе нельзя сказать. Тут вопрос больше к предметной области
Ответ написан
hint000
@hint000
у админа три руки
Ответ сильно зависит от предметной области. Если это ЦУП, то никаких часовых поясов, хоть Байконур, хоть Восточный, хоть Мыс Канаверал - для всех UTC. Если это расписание поездов, то раньше вся страна отравлялась и прибывала по московскому времени, но потом решили сделать по местному (можно спорить о правильности решения, но для иностранных пассажиров логичнее видеть местное время). Если не можете решить, какой вариант лучше, то предоставьте пользователям возможность выбора. Тут в дело вступает наука об UI/UX, чтобы возможность выбора помогала пользователю, а не запутывала его.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы