Intereting Posts
Phpseclib показ входа в систему не выполнен vBulletin Переадресация входа в curl не работает Как я могу удалить ведущие и завершающие символы без буквенно-цифровых символов в PHP? php-cgi работает очень медленно на окнах setlocale не влияет на PHP Получите значение URL-адреса после последней косой черты как читать файлы, сохраненные на сервере, используя php и совершать вызовы на эту php-страницу, используя ajax для отображения списка файлов Сохранять данные в автономном режиме до публикации Соответствие регулярных выражений, если максимум два вхождения точки и тире PHP: Как удалить из строки последнее слово? Извлечение только даты из поля datetime (mysql) и назначение его переменной php Продолжайте получать «Ежедневный лимит неисполненного использования превышен. Продолжение использования требует регистрации "при попытке Google плюс вход в мое веб-приложение mod_rewrite с вопросительными знаками и амперсандами (с PHP) preg_replace, вызывающий удаление знаков доллара Does move_uploaded_file () автоматически удаляет временный загруженный файл после SUCCESSful Move?

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

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

ситуация

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

Предложенное решение

хранения

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

Отображение

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

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

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

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

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

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

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

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