Задать вопрос
@Nolan81
программист

Устанавливать ли в php таймзону пользователя?

Привет.
Прочел достаточно статей на тему, примерно понял систему, что храним в UTC, но хотел бы пару моментов уточнить.

Сервер, например, работает в Москве, а его пользователи по всей стране. Каждый пользователь в своем личном кабинете может установить себе личную временную зону (ЛВЗ далее) .

Такие вопросы:
1) В php приложении, в бутстрапе, не стоит в date_default_timezone_set() устанавливать эту ЛВЗ пользователя? Т.к. это будет аффектить все другие подсистемы, типа логов.

2) В БД, mysql, установка временной зоны по умолчанию в UTC считается нормой?

3) Использовать ли тип TIMESTAMP, который хранит в базе время в UTC (что и хотели), а временную зону в БД будем в бутстрапе устанавливать в значение равное ЛВЗ пользователя? Дата будет прилетать в базу, как клиент ввел.
Но если учесть пункт 1), то зоны в разных частях приложения будут отличаться.

4) Может использовать тип DATETIME , куда перед сохранением, и выборками, всегда конвертить дату из ЛВЗ в UTC, и обратно?

5) Какие главные минусы против чтобы временную метку хранить просто как число unixtimestamp? То что выборки , когда нужны всякие DATE специфичные функции, потребуют преобразования в тип дату в каждой строке? (это преобразование может не сложное?, ведь datetime и так хранится как число)
  • Вопрос задан
  • 78 просмотров
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Проблем с временными зонами вообще не будет, если их представление выдавить максимально ближе к модели представления данных на интерфейсе пользователя.
Нужно конвертировать в строку только непосредственно перед отрисовкой дату и время из UTC, и обратно загонять время в UTC, если забираете пользовательский ввод.
Весь бек должен работать в одной временной зоне, а от пользователя знать, что он в такой-то временной зоне, только в контексте сессионной переменной, если это необходимо.
Ответ написан
Комментировать
@artem-dainov
Php, java, js. Boot spring, jquery, git
Когда я начинал изучение языков программирование, ко мне пристала одна проблема, из-за которой мне говорили, что я полный нуб.
Я время, в базе, хранил как метку в секундах, да и до сих пор так делаю. А если надо в человеко-понятный уровень превратить, так в PHP есть date(), и в js new Date()
А когда хранят в базе что-то подобное 2025-01-31t12:55:43, то это какой-то мрак.
Конечно, такой подход убирает сложность работы с датами, но я люблю, когда дата представлена как 31 янв 12:55, причем год должен появиться только тогда, когда нынешний и в дате сохранения не совпали.
Да, это лишняя обработка на фронте, но ведь красиво же и еще доступней для пользователей.

А теперь к сути вопроса.
1. Сервер должен иметь постоянный часовой пояс. Клиенту отправлять даты именно в этом часовом поясе. Я бы выбрал нулевой пояс. Просто мне проще в голове представлять как отнимать или прибавлять.
2. На клиенте обрабатывать данные и выставлять часовой пояс соответствуя данным из браузера.
3. Если такая настройка есть, чтобы пользователь изменил часовой пояс, то тут должен произойти просто пересчет и всё.
У вас, на клиенте, должен быть объект js, который должен хранить некоторые глобальные настройки аккаунта, которые должны всегда загружаться вместе со страницей.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы