В PHP, как я могу получить Timezone из офсетной линии и страны?

Я делаю IP-поиск, чтобы определить «лучшее предположение» для смещения часового пояса от UTC и информации о стране / регионе.

Так, например, у меня есть коррекция -3 и страна Бразилия.

Я хочу показать BRT вместо случайного часового пояса в том же смещении, то есть ART

Есть ли встроенный способ в PHP, чтобы установить соответствующий часовой пояс с этой информацией?

Если нет, то каким будет самый простой способ сделать это? (Предположим, что я не могу совершать внешние вызовы API)

Если я сделаю свою собственную таблицу базы данных, как я могу обеспечить ее актуальность?

Благодаря!

Solutions Collecting From Web of "В PHP, как я могу получить Timezone из офсетной линии и страны?"

Вам не нужно сворачивать свою собственную базу данных, вот одна из GeoNames . Вы также можете получить всю информацию о часовом поясе от PHP .

Вы не можете разрешить часовой пояс из смещения или даже смещения плюс страна. См. Раздел TimeZone != Offset вики-метки TimeZone . Сборы изменились во многие моменты времени, и они неизбежно изменятся снова.

Вам нужна дополнительная информация, например, широта / долгота. См. Эту вики сообщества .

Если вы можете попросить своего часового пояса, пожалуйста, сделайте это. Это лучший способ. Мой любимый пользовательский интерфейс для этого – это сборщик часовых поясов на основе карт, такой как этот . Вы можете сделать наилучший выбор по умолчанию, используя jsTimeZoneDetect .

Эта функция PHP возвращает массив всех существующих часовых поясов, включая Offset, а не то, что вы ищете, но, возможно, это помогает:

 function time_zonelist(){ $return = array(); $timezone_identifiers_list = timezone_identifiers_list(); foreach($timezone_identifiers_list as $timezone_identifier){ $date_time_zone = new DateTimeZone($timezone_identifier); $date_time = new DateTime('now', $date_time_zone); $hours = floor($date_time_zone->getOffset($date_time) / 3600); $mins = floor(($date_time_zone->getOffset($date_time) - ($hours*3600)) / 60); $hours = 'GMT' . ($hours < 0 ? $hours : '+'.$hours); $mins = ($mins > 0 ? $mins : '0'.$mins); $text = str_replace("_"," ",$timezone_identifier); $return[$timezone_identifier] = $text.' ('.$hours.':'.$mins.')'; } return $return; }