在PHP中,如何从偏移量和国家/地区获取时区?

在PHP中,如何从偏移量和国家/地区获取时区?,php,timezone,Php,Timezone,我正在进行IP查找,以确定与UTC的时区偏移和国家/地区信息的“最佳猜测” 例如,我有偏移量-3和国家巴西 我想显示BRT,而不是在同一偏移量的随机时区,即ART PHP中是否有内置的方法可以使用这些信息设置适当的时区 如果没有,最简单的方法是什么? (假设我不能进行任何外部API调用) 如果我使用自己的数据库表,如何确保它保持最新 谢谢 您不必滚动自己的数据库,这里有一个。您也可以。您无法从偏移量解析时区,甚至无法从偏移量加国家/地区解析时区。查看时区!=偏移量部分。偏移量在很多时间点都发生了

我正在进行IP查找,以确定与UTC的时区偏移和国家/地区信息的“最佳猜测”

例如,我有偏移量-3和国家巴西

我想显示BRT,而不是在同一偏移量的随机时区,即ART

PHP中是否有内置的方法可以使用这些信息设置适当的时区

如果没有,最简单的方法是什么? (假设我不能进行任何外部API调用)

如果我使用自己的数据库表,如何确保它保持最新


谢谢

您不必滚动自己的数据库,这里有一个。您也可以。

您无法从偏移量解析时区,甚至无法从偏移量加国家/地区解析时区。查看
时区!=偏移量
部分。偏移量在很多时间点都发生了变化,并且不可避免地会再次发生变化

您需要更多信息,例如纬度/经度。看


如果您可以询问用户的时区,请这样做。那是最好的办法。我最喜欢的UI是基于JavaScript映射的时区选择器。您可以使用来进行最佳猜测默认选择。

此PHP函数返回所有现有时区的数组,包括偏移量,这不完全是您要查找的,但可能有帮助:

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;
}
功能时间\区域列表(){
$return=array();
$timezone_identifiers_list=时区_identifiers_list();
foreach($timezone\u identifier\u作为$timezone\u identifier列出){
$date\u time\u zone=新日期时区($timezone\u标识符);
$date\U time=新日期时间($now’,$date\U时区);
$hours=floor($date\u time\u zone->getOffset($date\u time)/3600);
$mins=楼层($date\u time\u zone->getOffset($date\u time)-($hours*3600))/60);
$hours='GMT'($hours<0?$hours:'+.$hours);
$mins=($mins>0?$mins:'0'.$mins);
$text=str\u replace(“\u”,”,$timezone\u标识符);
$return[$timezone_identifier]=$text.'('.$hours.:'.$mins.');
}
return$return;
}

您是否认为时区一直在变化,保持“最新”是一个主要问题?这取决于您对“主要问题”的定义,但是的,它们的变化频率足以让我担心。即使在美国,印第安纳州也在2005年改变了DST观测。很酷,谢谢,这对我来说已经足够好了。我在研究答案时访问过这里,但不想使用他们的API,也没有看到之前可下载的数据。