Javascript - 从rawOffset Google时区API计算时间

时间:2015-05-13 09:04:09

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

我正在开发一个应用程序来获取当地的城市时间。我正在使用谷歌地理编码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中,我读到了

  

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

这里的时间戳参数是什么?除1331161200之外,我无法提供任何其他内容。

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

更新

FIX :这是因为我在时区API中将timestamp参数作为1331161200传递。当我使用以下代码替换时间戳时,我通过dstOffset和rawOffset从Google API获得了正确的响应。

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

任何人都可以给我技术解释它是如何工作的吗?

1 个答案:

答案 0 :(得分:1)

您还没有考虑夏令时偏移,这就是为什么某些城市会在一小时内停工。

calcTime(rawOffset+dstOffset);

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