Получите текущее местное время с помощью openweathermap

#php #date #openweathermap

Вопрос:

Я использую API openweathermap для получения погоды из разных мест. от этого я получаю :

 "sys":{"type":2,"id":2008110,"country":"CH","sunrise":1633585192,"sunset":1633626144},"timezone":7200
 

Но я не знаю, как получить локальное время с помощью php…

Комментарии:

1. это может помочь: текущее.dt Текущее время, Unix

Ответ №1:

API предоставляет отметку времени UTC и смещение часового пояса.

 $sunrise = 1633585192;
$timezoneOffset = 7200;  //Seconds
 

Если объект DateTime создается на основе метки времени, часовой пояс всегда будет UTC.

 $dt = date_create("@".$sunrise);
 

Чтобы получить местное время, объект должен быть преобразован в правильный часовой пояс.

 $hhmm = sprintf("% 03d:d",(int)($timezoneOffset/3600),$timezoneOffset600); // 02:00
$dt->setTimeZone(new DateTimeZone($hhmm));
//"2021-10-07 07:39:52.000000"
 

Теперь объект имеет желаемое местное время и правильный часовой пояс.

Комментарии:

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

2. Верно. И фиксированное время-1 января 1970 года, 00:00 UTC.