php DateTimeZone-> getOffset () возвращает недопустимое смещение для часовых поясов GMT - PullRequest
3 голосов
/ 17 марта 2011

Надеюсь, кто-то заметит причину возникшей проблемы.

Для всех других часовых поясов, таких как "Европа / Хельсинки", приведенный ниже расчет смещения возвращает правильные значения, но по какой-то причине я получаю отрицательное значениезначение для часовых поясов в стиле 'Etc / GMT + 2' и наоборот (например, для Etc / GMT-2 я получаю положительное значение, 7200).

$dateTimeZone = new DateTimeZone('Etc/GMT+2');
echo $dateTimeZone->getOffset(new DateTime("now", new DateTimezone( 'UTC' )));

Ожидаемое: 7200 Результат: -7200

Ответы [ 2 ]

5 голосов
/ 17 марта 2011

Часовой пояс Etc/GMT+2 - это то, что в противном случае называется «GMT-2» или представлено как <date time>-02:00.

Это связано с тем, что POSIX представляет эти типы смещений часового пояса:

Смещение указывает значение времени, которое необходимо добавить к местному времени, чтобы получить значение всемирного координированного времени.Он имеет синтаксис вроде [+ | -] чч [: мм [: сс]].Это положительно, если местный часовой пояс находится к западу от премьер-меридиана, и отрицательно, если он восточнее.Час должен быть от 0 до 23, а минуты и секунды от 0 до 59.

С Переменная TZ .

И:

Числовые сокращения часовых поясов обычно отсчитывают часы к востоку от UTC, например, +09 для Японии и -10 для Гавайев.Однако переменная окружения POSIX TZ использует противоположное соглашение.Например, можно использовать TZ = "JST-9" и TZ = "HST10" для Японии и Гавайев, соответственно.Если база данных tz доступна, обычно лучше использовать вместо нее такие настройки, как TZ = "Asia / Tokyo" и TZ = "Pacific / Honolulu", так как это должно избежать путаницы, лучше обрабатывать старые метки времени и лучше оградить вас от любыхбудущие изменения в правилах.Никогда не следует устанавливать для POSIX TZ значение, подобное «GMT-9», поскольку это будет ложно утверждать, что местное время на девять часов опережает UTC, а часовой пояс называется «GMT».

С Источники данных о часовом поясе и летнем времени - нотация .

1 голос
/ 17 марта 2011

С http://www.php.net/manual/en/timezones.others.php#64310

Знаки плюс и минус (+/-) не являются интуитивно понятными. Например,

"Etc / GMT-10" фактически относится к часовому поясу "(GMT + 10: 00) Канберра, Сидней, Мельбурн ".

...