需要使用Javascript Date Object在DST转换上显示本地时间

时间:2011-09-05 16:19:38

标签: javascript date utc dst

我试图在Javascript中以小时(小时)的间隔输出一系列时间(因此在Firefox等网络浏览器中)。这一系列时间将重叠短日(春季减少一小时)和漫长的一天(秋季增加一小时)。我正在寻找的输出是本地时间,即应用了时区和DST偏移。因此,例如,在英国,我们在短时间内从01:00到01:59缺少一个小时,输出将是:

00:00,02:00,03:00

在漫长的一天,我们从01:00到02:00有一个额外的小时,输出将是:

00:00,01:00,01:00,02:00,03:00

我已经找到了这两个很好的答案,突出了一些陷阱并解决了我的问题:

但真正的困难在于让javascript知道上面提到的第二个问题中确定的这个缺失和额外的小时(可以这么说)。

我认为一个潜在的解决方案是以UTC(也就是GMT)运行,只是转换到当地时间,但我很难看到我能做到这一点。

有没有人对如何实现我的目标有任何想法?

2 个答案:

答案 0 :(得分:3)

如果你有一个固定的时区,下面的javascript代码似乎可行(在上一个chrome版本和firefox 6上测试过):

 // set the date to 11 / 04 / 2012 at 00:00 UTC
 var date = new Date(1331424000000);
 for(var i = 1; i <= 12; i++) {   
     $('.data-dston').append(' ' + date.getHours() + ':00, ');
     date = new Date(date.getTime() + 3600000)
 }

 // set the date to 04 / 11 / 2012 at 00:00 UTC
 var date = new Date(1351987200000);
 for(var i = 1; i <= 12; i++) {   
     $('.data-dstoff').append(' ' + date.getHours() + ':00, ');
     date = new Date(date.getTime() + 3600000)
 }

这是一个JSFiddle:http://jsfiddle.net/Vsd2A/3/,可以看到代码在运行!

答案 1 :(得分:1)

改编Krtek提出的建议(我的时区 - 英国)我现在有以下内容:

// set the date to 27 / 03 / 2011 at 00:00 UTC
var date = new Date('27 Mar 2011 00:00');
for(var i = 1; i <= 12; i++)
{   
    $('.data-dston').append(' ' + date.getHours() + ':00, ');
    date.setTime(date.getTime() + 3600000);
}

// set the date to 30 / 10 / 2011 at 00:00 UTC
var date = new Date('30 Oct 2011 00:00');
for(var i = 1; i <= 12; i++)
{   
    $('.data-dstoff').append(' ' + date.getHours() + ':00, ');
    date.setTime(date.getTime() + 3600000)
}

这样做的好处是不必在每次迭代中构造新对象。