PHP Echo Timezone, основанный на смещении по Гринвичу - PullRequest
1 голос
/ 17 декабря 2009

У меня есть приложение, которое хранит данные о времени по Гринвичу в базе данных MySQL, например: 2009-12-16 15: 27: 47.

Смещение часового пояса пользователя сохраняется в другом столбце, например: -6

Выше часовой пояс GMT-6, который является CST. Можно ли как-то повторить CST (т.е. дату ('T')) из данных смещения по Гринвичу?

Примечание: я также должен добавить, что глобальный часовой пояс приложения устанавливается с помощью: date_default_timezone_set ('GMT');

1 Ответ

2 голосов
/ 17 декабря 2009

К сожалению, не существует единого часового пояса для каждого смещения по Гринвичу. Многие смещения по Гринвичу имеют несколько часовых поясов. Кроме того, смещения GMT изменяются во время летнего времени (где это применимо). Например, во время летнего времени США / Аризона и США / горы имеют одинаковое смещение по Гринвичу; однако в остальное время года US/Mountain и US/Arizona не разделяют одно и то же смещение по Гринвичу. Вы можете использовать DateTimeZone::listIdentifiers() или , ознакомьтесь с руководством для получения списка поддерживаемых часовых поясов в PHP.

Если бы вы запускали приложение с нуля, я бы предложил сохранить идентификатор часового пояса вместо смещения по Гринвичу, но я предполагаю, что ваше приложение уже работает. В этом случае не существует надежного способа отображения часового пояса без улучшения ваших данных.

Я бы предложил добавить столбец timezone в таблицу. Вы можете написать одноразовый скрипт, который установит timezone в некоторый заранее определенный список значений по умолчанию на основе смещения по Гринвичу. Например, если смещение по Гринвичу равно 8, установите timezone на America/Los_Angeles. Наконец, измените ваше приложение, чтобы отображать / сохранять идентификаторы часовых поясов вместо смещений по Гринвичу. Это может вызвать проблемы для подмножества ваших пользователей, но это позволяет им менять свой часовой пояс, если это необходимо.

...