2

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

因此,例如,我有抵消 -3 和国家巴西。

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

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

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

如果我自己做数据库表,如何确保它保持最新?

谢谢!

4

3 回答 3

2

无法从偏移量,甚至是偏移量加国家/地区解析时区。请参阅TimeZone 标签 wikiTimeZone != Offset部分。偏移量在很多时间点都发生了变化,并且不可避免地会再次发生变化。

您需要更多信息,例如纬度/经度。请参阅此社区维基

如果您可以向您的用户询问他们的时区,请这样做。这是最好的方法。我最喜欢的 UI 是一个基于 JavaScript 地图的时区选择器,例如这个. 您可以使用jsTimeZoneDetect做出最佳猜测默认选择。

于 2013-04-24T18:10:27.633 回答
1

您不必滚动自己的数据库,这是GeoNames中的一个。您还可以从 PHP 获取所有时区信息

于 2013-01-29T18:38:13.510 回答
1

这个 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;
}
于 2016-03-23T12:47:27.900 回答