Задать вопрос
svisch
@svisch

Как лучше работать в postgresql и php с временными зонами?

Здравствуйте. Помогите пожалуйста разобраться как лучше реализовать отображение даты и времени с учетом временной зоны пользователя, а то изучая этот вопрос запутался. Раньше использовал временную метку Unix и не заморачивался с зонами, теперь решил разобраться.
Итак, вот вопросы или утверждения, к которым я пришел в процессе изучения этого вопроса :
1. Дату и время в бд надо хранить в UTC. Вопрос - в timestamp with timezone(далее timstampTZ) или timestap without timezone (далее timestamp)?
2. Почему UTC, а не время сервера? В случае выбора timestamp понятно - удобнее делать смещение по сохраненным настройкам временной зоаны пользователя. А вот в случае timestampTZ нет, ведь там уже задано смещение.
3. Сервер (ОС, PHP, БД) настраивать на UTC время, или достаточно просто в нем его сохранять?
4. Если timestamp, то какой смысл и практическое применение типа данных timestampTZ ?
5. Пробовал сохранить в поле бд timestampTZ время с учетом смещения используя
new DateTime('now', new DateTimeZone('Europe/Moscow'))
- в базу попадает все равно время UTC. Почему? (бд настроена на UTC)

Буду благодарен за ответы на вопросы и подсказки лучших практик работы с временными зонами. Спасибо!
  • Вопрос задан
  • 549 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@tukreb
Лучше работать через DateTimeImmutable. А от DateTimeизбавляться где возможно.
Для PostgreSQL DateTimeImmutable это - TIMESTAMP(0) WITHOUT TIME ZONE
https://stackoverflow.com/questions/67536245/datet...
https://github.com/symfony/symfony/issues/47580

Вы всегда сможете прибавить к времени часовой пояс, там где вам нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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