我试图在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)运行,只是转换到当地时间,但我很难看到我能做到这一点。
有没有人对如何实现我的目标有任何想法?
答案 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)
}
这样做的好处是不必在每次迭代中构造新对象。