通过他们的lat / long / city获取用户当前时间

时间:2013-04-17 20:39:17

标签: php geolocation timezone timezone-offset

我正在使用http://ipinfodb.com/ api以获得用户lat / long ... I have用户时区采用数组格式。该数组返回以下信息......

array(11) { 
     ["statusCode"]=> string(2) "OK"... 
     ["countryCode"]=> string(2) "CA" 
     ["countryName"]=> string(6) "CANADA" 
     ["regionName"]=> string(16) "BRITISH COLUMBIA" 
     ["cityName"]=> string(8) "VANCOUVER" ....
     ["timeZone"]=> string(6) "-07:00" 
}

使用数组中的信息,当我的时区格式为-07:00,04:00等等时,我如何找到用户当前时间

1 个答案:

答案 0 :(得分:4)

“时区”不是偏移量!令我困扰的是,这么多的API会导致这个常见的错误。不要被返回字段称为“timeZone”的事实所迷惑。

“时区”是一年中可以有一个或多个抵消的区域。您可以解决时区和日期的偏移量,但不能转向另一个方向! A list of TZDB time zones is here

具体时区为America/Vancouver - 不是因为您的纬度/经度与温哥华市相匹配,而是因为温哥华恰好是您所在地区时区的参考城市。并非每个城市都有自己的时区ID,因此您无法做出任何假设。

-07:00是America/Vancouver时区的当前偏移量。它恰好是夏令时抵消。当夏令时结束时,它将变为-08:00。您使用的特定Web服务似乎不会显示此信息。

StackOverflow上还有其他几个问题已经回答了如何从lat / lon解析实际时区。您可以调用Web服务,也可以使用自己的数据库。以下是一些链接:

我相信还有更多。我很想把它作为副本关闭,但我之前没有看过ipinfodb.com。

如果您确定您的API返回当前偏移量,并且您只想要用户的当前时间,那么正如Jonathon在问题评论中指出的那样,您可以只需将偏移应用于当前UTC时间,您就会知道该位置的时间。但你每次都必须这样做。您无法保存该偏移量并在以后再次使用它。为此,您需要完整的时区参考。