Лучший способ обрабатывать хранение / отображение даты в разных часовых поясах в PHP?

29

Я читал эту тему в течение последних нескольких часов, и я думаю, что у меня есть ручка, но я хотел бы получить подтверждение.

Ситуация

Я хочу, чтобы пользователь, скажем, Калифорния, мог опубликовать комментарий, который будет храниться в MySQL. Затем я хочу, чтобы пользователь, скажем, в Техасе, мог просмотреть комментарий с датой, настроенной на его часовой пояс.

Предлагаемое решение

Сохранение

  • Выполните следующее в начале приложения, чтобы все функции даты использовали часовой пояс UTC: date_default_timezone_set('UTC');
  • $Date = new DateTime();, чтобы получить объект DateTime с текущей датой и временем в UTC.
  • Используйте $Date->format(), чтобы получить значение для вставки в столбец типа datetime в MySQL.

Отображение

  • Получить информацию о часовом поясе пользователя с JavaScript и сохранить ее в файле cookie.
  • Запустите запрос MySQL SELECT, чтобы получить значение столбца datetime.
  • $Date = new DateTime($row['time']); для создания объекта DateTime с сохраненным временем UTC.
  • $Date->setTimezone(new DateTimeZone($userTimezone));, чтобы настроить время UTC на часовой пояс пользователя.
  • Отображение с использованием $Date->format();

Это суть того, что нужно сделать? Не хватает ли лучшего решения? Спасибо за вашу помощь!

Теги:
datetime
date
timezone

2 ответа

14
Лучший ответ

Это можно сделать еще проще. Поскольку вы используете JavaScript, почему бы не использовать JavaScript для настройки часового пояса на клиенте?

  • Хранить все время на сервере в формате UTC
  • Подавать их клиенту как UTC
  • Клиент использует время настройки JavaScript в локальном часовом поясе

Это не только упрощает работу, но и устраняет проблему с вашей моделью. Если я зарегистрировал свою учетную запись в Нью-Йорке, но путешествую в Австралию, я хочу видеть время в соответствии с австралийским часовым поясом. Фактически, используя JavaScript, который вы используете, вы можете легко настроить параметры, делая дизайн еще более динамичным. Во-вторых, вы можете избежать накладных расходов на сохранение пользовательского часового пояса.

Тем не менее, если вы хотите, чтобы ваш дизайн ухудшался в браузерах, отличных от JavaScript, вам лучше использовать полный подход на стороне сервера, полагаясь на HTTP файлы cookie (а не полагаться на JS для извлечения файлов cookie).

  • 0
    Я думаю, что я собираюсь установить cookie часового пояса при входе пользователя в систему, поэтому он должен обновляться, если вы отправляетесь в Австралию и входите оттуда. Вы предлагаете, чтобы какой-нибудь JavaScript выполнялся при загрузке страницы, который, например, ищет время в <span class = "time"> и конвертирует их все на лету?
  • 0
    Единственный способ добраться до пользовательских часов - через JS или Geo-IP. Последнее сложно и ненадежно. Если вы собираетесь использовать JS в любом случае, то выполнение этого во время входа в систему требует большего домашнего обслуживания (отслеживание на стороне сервера). Делать это на лету имеет больше смысла здесь.
Показать ещё 3 комментария
3

Вы все это делаете. Сохраняйте все даты в UTC (GMT + 0), извлекайте их как таковые из базы данных и применяйте смещение пользователя.

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

  • 0
    Я согласен, это то, что я бы сделал.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню