Часовой пояс в PHP - PullRequest
       21

Часовой пояс в PHP

4 голосов
/ 13 апреля 2009

PHP, кажется, использует довольно раздражающий метод для установки часового пояса evnironment, используя имена регионов, а не смещение по Гринвичу. Это делает выпадение часового пояса огромной болью, потому что оно либо должно быть огромным, чтобы вместить все возможные значения часового пояса PHP, либо я должен найти способ преобразовать смещение GMT ​​в допустимое значение для передачи в PHP.

Итак, учитывая смещение по Гринвичу, как я могу установить часовой пояс в PHP? Например, как я могу преобразовать значение смещения GMT "-8.0" в значение, которое я мог бы передать date_timezone_set()?

Ответы [ 4 ]

17 голосов
/ 13 апреля 2009

Использование имени региона - это правильный способ описания часового пояса. Использование смещения по Гринвичу само по себе крайне неоднозначно.

Это отражено в вашем вопросе - как вы должны конвертировать смещение GMT ​​-8 в часовой пояс? Ну, это зависит от того, что на самом деле означает «GMT -8». Означает ли это «UTC-8 в любой момент времени» или «UTC-8 в зимнее время и UTC-7 в летнее время»? Если это последнее, когда зима начинается и заканчивается?

Я бы надеялся , что PHP принял хорошо известный набор значений для "фиксированных" (без DST) часовых поясов, например, "Etc / GMT + 3" и т. Д. Но если вы действительно не имеете в виду фиксированный часовой пояс, вам лучше выяснить, о каком регионе вы на самом деле говорите, потому что в противном случае ваши вычисления почти гарантированно окажутся неверными .

Я боролся с часовыми поясами большую часть прошлого года. Это боль - особенно , когда некоторые зоны меняют свои правила для перехода на летнее время (как это сделали США несколько лет назад) или когда некоторые зоны выбирают и выходят из летнего времени, по-видимому, по своему желанию. Попытка отразить все это в одном числе - глупость. Если вас интересует только один момент времени, это может быть хорошо, но в этот момент вы могли бы просто сохранить значение UTC в первую очередь. В противном случае имя является лучшим подходом. (Это не обязательно просто плавание в тот момент, заметьте. Даже имена меняются со временем ...)

5 голосов
/ 13 апреля 2009

Если вы используете PHP> = 5.2, вы можете использовать встроенный метод класса DateTimeZone, listAbbreviations.

var_dump( DateTimeZone::listAbbreviations() );
1 голос
/ 27 декабря 2013

Вы также можете попробовать использовать библиотеку PHP Дата для работы с датой и временем в разных часовых поясах и форматах - https://github.com/barbushin/dater

1 голос
/ 13 апреля 2009

Вам потребуется вести базу данных с данными о летнем времени для разных мест, поэтому лучше хранить место.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...