在PHP中,如何从偏移量和国家/地区获取时区?
我正在进行IP查找,以确定与UTC的时区偏移和国家/地区信息的“最佳猜测” 例如,我有偏移量-3和国家巴西 我想显示BRT,而不是在同一偏移量的随机时区,即ART PHP中是否有内置的方法可以使用这些信息设置适当的时区 如果没有,最简单的方法是什么? (假设我不能进行任何外部API调用) 如果我使用自己的数据库表,如何确保它保持最新在PHP中,如何从偏移量和国家/地区获取时区?,php,timezone,Php,Timezone,我正在进行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,也没有看到之前可下载的数据。