Подтвердить что ты не робот

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

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

Ситуация

Я хочу, чтобы пользователь, скажем, Калифорния, мог опубликовать комментарий, который будет храниться в 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();

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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