1

我有一个工作脚本,我将它推送到我们组织中每个人的 IE 收藏夹列表(见下文)。根据办公室在公司的地理位置,它们会被路由到 4 个 URL 中的 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>

我想知道夏令时将如何影响我的剧本,因为我知道我们在亚利桑那州设有办事处,但他们不认识它。我需要对我的脚本进行哪些更改以确保人们仍然被正确路由?我在想类似的东西..

如果日期在 3 月 11 日和 11 月 4 日之间,则运行此...如果不是...运行此...

那有意义吗?还是我什至需要担心这一点,当他们的时钟改变或不改变时,一切都会自行解决?

4

2 回答 2

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 时通常同样无能为力(因为开始和结束时间的规则通常在不断变化)。

对于您的需要,我认为上面的代码应该可以解决问题。

于 2012-10-04T20:13:50.260 回答
0

http://www.pageloom.com/automatic-timezone-detection-with-javascript上有一个非常强大的时区检测脚本。未缩小的代码可在https://bitbucket.org/pellepim/jstimezonedetect/src/e265c8eddec7/detect_timezone.js获得。

于 2012-10-04T19:10:35.873 回答