我正在进行IP查找,以确定时区与UTC和国家/地区信息的偏移量的"最佳猜测"。
因此,例如,我有偏移量-3和国家巴西。
我想显示BRT而不是同一偏移量的随机时区,即ART
PHP 中是否有一些内置方法可以使用此信息设置适当的时区?
如果没有,最简单的方法是什么?(假设我无法进行任何外部 API 调用)
如果我自己做数据库表,如何确保它保持最新?
谢谢!
您无法从偏移量解析时区,甚至无法解析偏移量加号国家/地区。 请参阅时区标记维基的TimeZone != Offset
部分。 偏移量在许多时间点都发生了变化,并且不可避免地会再次发生变化。
您需要更多信息,例如纬度/经度。 请参阅此社区维基。
如果您可以询问用户他们的时区,请这样做。 这是最好的方法。 我最喜欢的UI是基于JavaScript地图的时区选择器,比如这个。 您可以使用 jsTimeZoneDetect 做出最佳猜测的默认选择。
您不必滚动自己的数据库,这是来自GeoNames的数据库。您还可以从 PHP 获取所有时区信息。
这个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;
}