Получение правильного времени на основе часового пояса с использованием PHP - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь использовать точное текущее местное время для любого места в мире на основе их "TimezoneId". Иногда я получаю правильное смещение по Гринвичу. Например:

$localTimezone = new DateTimeZone('America/Los_Angeles');
$gmtTimezone = new DateTimeZone('GMT');
$currentDateTime = new DateTime('2020-01-21 13:14', $gmtTimezone);
$offset = $localTimezone ->getOffset($currentDateTime );
echo $offset/3600;

Возвращает -8, что соответствует текущей дате в Лос-Анджелесе.

Однако, когда я пытаюсь использовать то же самое, используя America/Sao_Paulo в качестве "TimezoneId", я получить -2, который в настоящее время не подходит для этого местоположения. Это должно быть -3 в соответствии с Google и другими приложениями, которые я пробовал.

Я искал решение и видел различные попытки, которые, кажется, не работают.

Спасибо за ваш вклад!

1 Ответ

3 голосов
/ 21 января 2020

Согласно timeanddate.com Бразилия прекратила наблюдать летнее время 17 февраля 2019 года. Чтобы это отразилось в вашей заявке, вам нужен релиз PHP, который включает версию базы данных часовых поясов IANA, обновляемую после каждого раза объявление было сделано. Я запустил ваш код в 3v4l.org и получил 7.3.9 - 7.4.1.

...