【问题标题】:Javascript - Calculate time from the rawOffset Google timezone APIJavascript - 从 rawOffset Google timezone API 计算时间
【发布时间】:2015-07-24 11:16:06
【问题描述】:

我正在开发一个应用程序来获取城市的当地时间。我正在使用谷歌地理编码 API 来获取城市的纬度和经度,并将其传递给时区 API。

时区 API 返回以下内容

{
"dstOffset" : 0,
"rawOffset" : 0,
"status" : "OK",
"timeZoneId" : "Europe/London",
"timeZoneName" : "Greenwich Mean Time"
}

我需要计算以下时间。从这个 SO answer,我得到了以下代码来从 rawOffset 获取本地时间。

function calcTime(offset) {
var d = new Date();
var utc = d.getTime() + (d.getTimezoneOffset() * 60000);
var nd = new Date(utc + (3600000*offset));

alert("The local time is " + nd.toLocaleString());
}
calcTime(-28800.0);

但是对于像 London, Washington, NewYork 这样的城市,这会延迟一小时,并返回 Arizona 的正确时间。

还有。我不知道local timerawOffset 参数之间的这种关系来计算时间。请解释这个rawOffset 参数是什么以及如何解决某些城市的这一小时延迟问题。

在 Google TimeZone API Documentation,我读到了

给定位置的本地时间是时间戳参数与结果中的 dstOffset 和 rawOffset 字段的总和。

这里的时间戳参数是什么?除了1331161200,我什么都给不了。

非常感谢任何帮助。提前致谢。

更新

FIX :这是因为我在时区 API 中将 timestamp 参数作为 1331161200 传递。当我用以下代码替换时间戳时,我得到了来自 Google API 的正确响应,其中包含 dstOffset 和 rawOffset。

myDate = new Date('1/1/1970');
timeStamp = myDate.getTime();

谁能给我它是如何工作的技术解释?

【问题讨论】:

    标签: javascript google-maps datetime google-api google-maps-timezone


    【解决方案1】:

    您尚未考虑夏令时偏移,这就是某些城市延迟一小时的原因。

    calcTime(rawOffset+dstOffset);
    

    时间戳包含日期和时间,因为 DST 仅发生在一年中的某些时期。 https://stackoverflow.com/a/10428184/3583980

    【讨论】:

    • 返回的 dstOffset 也是 '0'。考虑华盛顿,现在返回的 rawOffset 是 -18000,dstOffset 是 0,calcTime 返回 4:13AM,但实际时间是 5:26AM
    • 我怀疑这只是让 DST 混乱的日期。使用 esqsoft.com/javascript_examples/date-to-epoch.htm 对今天的日期和时间进行编码,并将其作为 API 的时间戳。
    • 我已经更新了问题,请检查。问题已解决。这是由于我传递给时区 API 的时间戳。
    • 您硬编码了过去发生的日期(2012 年 3 月 7 日星期三 23:00:00 GMT+0000(GMT 标准时间)),没有 DST 作为时间戳。 myDate = new Date(); timeStamp = myDate.getTime();
    • 我猜不是因为过去。时间戳必须是 1/1/1970。当我执行 new Date('1/1/1970') 时,它起作用了。那么,时间戳浏览器是否依赖。?我认为我硬编码的时间戳不适用于导致问题的时区。
    猜你喜欢
    • 2013-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多