Проблемы с переходом на летнее время

Возможный дубликат:
Переход на летнее время и часовой пояс лучшие практики

В основном у меня такая проблема:

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

Итак, моя функция выглядит так: для нее требуется GMT +/- 3600 * usersTZ (смещение по Гринвичу). Лондон выглядит нормально, Австралия выглядит нормально, но, эй, Самоа, вместо того, чтобы быть, например: 5, это 6.

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


person Gabriel    schedule 20.09.2011    source источник
comment
DateTime и strtotime PHP поддерживают DST. Используйте их вместо этого.   -  person Gordon    schedule 20.09.2011
comment
Спасибо, Гордон, но, пожалуйста, задавайте вопросы, прежде чем отвечать, как форумный робот: стр. Я уже проверил вышеуказанные темы, strtotime не работает, время Самоа не отображается правильно для часового пояса Pacific / Samoa в strtotime, теперь это должно быть 21:01 понедельника (WST), что, на мой взгляд, довольно неудобно, потому что Самоа GMT -11, что составляет 22:00. И, кроме того, это нужно делать на основе ТЗ каждого клиента.   -  person Gabriel    schedule 20.09.2011
comment
Тогда мне интересно, почему вы с самого начала согласились с ответом, который предлагал то, что я предложил?   -  person Gordon    schedule 20.09.2011


Ответы (1)


PHP изначально может обрабатывать часовые пояса. Вам просто нужно установить часовой пояс в формате olson, например America / New_York.

Затем вы можете использовать date_default_timezone_set или любой другой материал php DateTime. который понимает часовые пояса.

Было бы очень полезно немного ознакомиться с документами PHP. Особенно здесь и здесь.

person blockhead    schedule 20.09.2011
comment
Да, но это не изменит все поведение даты и времени всех функций даты и времени во всем скрипте, где я могу изменить только одну функцию, и, кроме того, это не мой сервер и меняю функциональность в соответствии с моими потребностями как разработчика не вариант. - person Gabriel; 20.09.2011
comment
Это был просто пример простого способа сделать это. Вместо этого вы можете использовать класс DateTime, который принимает в качестве параметра объект DateTimeZone. Как я уже сказал, я настоятельно рекомендую вам прочитать документацию. - person blockhead; 20.09.2011
comment
Пробовал, но он говорит, что не распознает класс и Im afraid that means the PHP wasnt, скомпилированный с учетом этого. Не позволяйте себе роскошь перекомпилировать PHP. - person Gabriel; 20.09.2011
comment
Какую версию PHP вы используете? Это было встроено, начиная с версии 5.2.0 ... - person blockhead; 20.09.2011
comment
Спасибо, проблема решена :), ты получил мой голос - person Gabriel; 20.09.2011