【发布时间】:2013-03-29 15:57:19
【问题描述】:
我最近遇到了一个问题...
假设我有一些这样的 Javascript,例如:
var timezone = -(new Date()).getTimezoneOffset() / 60; // Get the TZ offset
var local = [];
var gmt = [];
for(var i = 0; i <= 23; i++) // Loop through each hour
{
local.push(i);
var time = (i + timezone);
if(time == 24)
time = 0;
gmt.push(time);
}
这在不在 DST 时完美运行,但是当 DST 到来时,我有意想不到的结果,例如:(本地用户在 GMT/DST)
> console.log(local);
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
> console.log(gmt);
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0]
两个数组应该相同的地方。
我如何检测夏令时生效的时间?
【问题讨论】:
-
鉴于您使用的算法,结果似乎完全正确。它应该适用于每一天,除非跨越白天时间边界。也许你可以解释你遇到的问题。
-
您的意思是当地时区是 GMT/BST(与 WET/WEST 相同),不是吗?
-
问题是应用程序应该检测 BST 何时生效并基本上将 GMT 更改为 BST @TomBlodget
-
@JordanDoyle - 这似乎正是它正在做的事情。它通过从返回当前日期/时间的
new Date()获取偏移量来检测 BST 是否有效。你为什么希望它保持不变?您是否只是在寻找不考虑 DST 的“标准”偏移量? -
我不希望两者相同,因为用户处于(当前)BST 时区,这意味着两个数组应该相同 - 就 DST 而言。在 DST 发生之前,这两个阵列是相同的。 @MattJohnson
标签: javascript time timezone dst