美国的javascript timezone脚本如何进行夏令时

时间:2012-10-04 19:01:47

标签: javascript time timezone-offset

我有一个工作脚本,我推送到我们组织中每个人的IE收藏夹列表(见下文)。根据办公室在公司的地理位置,他们将被分配到4个网址中的1个。

<html>
<body>

<script language="JavaScript">
var today = new Date();
var offset = (today.getTimezoneOffset() / 60) + 1;
if (offset == 5) document.location.href = "url=EASTERNtime.com";
else if (offset == 6) document.location.href = "url=CENTRALtime.com";
else if (offset == 7) document.location.href = "url=MOUNTAINtime.com";
else if (offset == 8) document.location.href = "url=pacifictime.com";
else document.location.href = "url=pickyourowntimezone.com";

</script>
</body>
</html>

我想知道夏令时是如何影响我的剧本的,因为我知道我们在亚利桑那州有办事处并且他们不认识它。我需要更改为我的脚本以确保人们仍然正确路由?我在想像......

如果日期是在11月11日到11月4日之间运行这个......如果不是......运行这个......

这有意义吗?或者我甚至需要担心这一点,当它们的时钟发生变化时它们会自行解决吗?

2 个答案:

答案 0 :(得分:1)

我的日期扩展程序有识别DST的方法:

http://depressedpress.com/javascript-extensions/dp_dateextensions/

如果日期显示在本地DST内, dateinstance .isDST()方法将返回“true”,否则返回“false”。

但是一般的想法既简单又令人震惊(因为它实际上只是一个愚蠢的猜测)。基本上,只要使用DST(或类似方案),并且定义了开始和结束日期,1月1日之间的时区偏移将与7月1日不同。添加一些代码来纪念南半球让每个人都做错了(我小子!)一个简单的函数来确定任何特定日期(以及我的扩展中使用的日期):

        // isDST 
        // Returns "true" if the date appears to fall within the local area's Daylight Saving Time (or similar scheme), returns false if the date does not (or it appears that the region doesn't observe DST).
Date.prototype.isDST = function() { 

        // Generate test dates
    var Jan1 = new Date(this.getFullYear(), 0);
    var Jul1 = new Date(this.getFullYear(), 6);

        // DST in the Northern hemisphere is "fall back"
    if ( Jan1.getTimezoneOffset() > Jul1.getTimezoneOffset() && this.getTimezoneOffset() != Jan1.getTimezoneOffset() ){
        return true;
    };
        // DST in Southern hemisphere is "leap ahead"
    if ( Jan1.getTimezoneOffset() < Jul1.getTimezoneOffset() && this.getTimezoneOffset() != Jul1.getTimezoneOffset()){
        return true;
    };
        // We're not in DST 
    return false;
};

使用TZ数据库的解决方案更加强大,因为它们可以确定正在使用哪个时区 - 但在确定时间是否在DST时通常也是无用的(由于开始和结束时间的规则是经常在变化中。)

根据您的需要,我认为上面的代码可以解决问题。

答案 1 :(得分:0)