Я делаю IP-поиск, чтобы определить «лучшее предположение» для смещения часового пояса от UTC и информации о стране / регионе.
Так, например, у меня есть коррекция -3 и страна Бразилия.
Я хочу показать BRT вместо случайного часового пояса в том же смещении, то есть ART
Есть ли встроенный способ в PHP, чтобы установить соответствующий часовой пояс с этой информацией?
Если нет, то каким будет самый простой способ сделать это? (Предположим, что я не могу совершать внешние вызовы API)
Если я сделаю свою собственную таблицу базы данных, как я могу обеспечить ее актуальность?
Благодаря!
Вам не нужно сворачивать свою собственную базу данных, вот одна из 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; }