javascript - Google 时区 API 的小时数不正确?

标签 javascript api timezone

我尝试通过获取网站访问者的当前时间,然后将其与位置一起插入到 Google 时区 API 中,来比较网站访问者位置和设定位置之间的小时数。然而,无论我如何扭转它,它似乎都是不正确的1或2小时。

我读错了什么吗?

请求:

https://maps.googleapis.com/maps/api/timezone/json?location=40.7127753,-74.0059728&timestamp=1569956387&key=API_KEY

输出:

{
   "dstOffset" : 3600,
   "rawOffset" : -18000,
   "status" : "OK",
   "timeZoneId" : "America/New_York",
   "timeZoneName" : "Eastern Daylight Time"
}

请求的第一部分是纽约市的经度和纬度(从 Google Places API 检索),第二个值(时间戳)是自 1970 年 1 月 1 日以来的秒数。这是我使用以下 JavaScript 从访问者处获取的:

+ new Date()
if (!Date.now) {
    Date.now = function() { return new Date().getTime(); }
}
Math.floor(Date.now() / 1000)

..对我来说结果是: 1569956387(秒)

Date.now() 返回自 1970 年 1 月 1 日以来的毫秒数,因此我需要除以 1000 转换为秒,因为 Google Time Zone API 使用自 1970 年 1 月 1 日以来的秒数。

根据 Google Time Zone API 文档:

rawOffset:给定位置相对于 UTC 的偏移量(以秒为单位)。这不会影响夏令时。

..rawOffset 是 JSON 输出

timestamp 将所需时间指定为自 UTC 1970 年 1 月 1 日午夜以来的秒数。时区 API 使用时间戳来根据位置的时区确定是否应应用夏令时。请注意,该 API 不考虑历史时区。也就是说,如果您指定过去的时间戳,API 不会考虑该位置之前位于不同时区的可能性。

..timestamp 是请求链接中指定的自 1970 年 1 月 1 日以来的秒数

我的本地时间目前是晚上 9:59 (1569956387)。计算 (18000/60)/60 或 (21600/60)/60 告诉我纽约市应该分别有 5 或 6 小时的路程,而事实是 7 小时的路程。

最佳答案

一些事情:

  • 您不需要为 Date.now 创建函数,除非您仍然需要支持 IE8,这在当今很少见。 IE9+ 和所有主流浏览器都内置了该功能。

  • Date.now()new Date().getTime() 返回基于 UTC 的时间戳,而不是您的本地时间。从哪个时区运行它并不重要,重要的是您的计算机时钟同步。

  • Google 时区 API 也采用 UTC 格式的时间戳,因此您正在做正确的事情来传递它(将毫秒调整为秒)。

  • 对于给定的时间戳,Google 正确地告诉您:

    • 给出的经纬度坐标位于由 America/New_York IANA 时区 ID 标识的时区
    • 要显示的英文长格式名称是东部夏令时间
    • rawOffset-18000 秒,或 UTC-5。该字段不包括夏令时,因此如果东部标准时间生效(这不是给定的时间戳),则它将使用偏移量
    • dstOffset 的效果为 3600 秒(或 1 小时),当将其添加到原始偏移量时,您会得到 (-18000) > + 3600 == -14400),或 UTC-4
  • Google 仅告诉您相对于 UTC 的偏移量,而不是相对于您本地时区的偏移量。如果您想包含该内容,可以调用 new Date().getTimezoneOffset() (基于当前时间)并将其添加到结果中。

关于javascript - Google 时区 API 的小时数不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190782/

相关文章:

javascript - 两个自动完成,在两个输入(differnet id)上,在同一页面上

javascript - 如何使用正则表达式匹配新生成的名称

android - 如何查看我的 Android 应用的网络消耗?

json - 提供 API 是否有助于阻止屏幕抓取?

datetime - Kendo UI Scheduler 错误地转换时间、向后添加和减去小时

javascript - 如何在 jQuery Mobile 页面中绑定(bind)提交事件

javascript - ng-click 重置按钮仅有效一次

api - 以RESTful方式在资源上调用服务器端方法

python - 如何从 python 中的日期时间字符串获取时区?

java - 如何格式化具有短名称 ID 和长名称的时区?