【问题标题】:Get users current time in php with their lat/long/city使用他们的纬度/经度/城市获取用户在 php 中的当前时间
【发布时间】:2013-04-10 19:03:42
【问题描述】:

我正在使用http://ipinfodb.com/ api 来获取用户的纬度/经度... I have users 时区,数组格式。数组返回如下信息...

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... 等时,我如何找到用户的当前时间

【问题讨论】:

  • 有机会获得时区名称吗?你检查过DateTime类吗?
  • 很遗憾,我找不到任何类似的东西......
  • 他们的时区,例如。 -07:00 可能是与 UTC 的偏移量。因此,您只需将该偏移量应用于当前 UTC 时间。

标签: php geolocation timezone timezone-offset


【解决方案1】:

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

“时区”是一年中可以有一个或多个偏移量的区域。您可以解决时区和日期的偏移量,但不能反其道而行之! A list of TZDB time zones is here.

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

-07:00 是America/Vancouver 时区的当前 偏移量。它恰好是夏令时偏移量。当夏令时结束时,它将更改为-08:00。您正在使用的特定网络服务似乎没有显示此信息。

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

我相信还有更多。我很想将其作为重复项关闭,但我之前没有看到 ipinfodb.com 被引用。

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

【讨论】:

  • 马特,感谢您花时间回答这个问题。这足以让我继续前进。
  • 没问题!乐意效劳! :)
  • 谢谢马特,我真的想通了,谢谢你,也得到了stackoverflow.com/questions/11820718/…的一些帮助@
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2011-05-01
相关资源
最近更新 更多