2012-10-04 85 views
1

我有一個工作腳本,我推送到我們組織中的每個人的IE收藏夾列表(見下文)。根據辦公室在地理位置上的位置,他們會被路由到4個URL中的1個。javascript時區腳本爲美國如何做夏令時

<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日之間運行這個...如果不是...運行此...

這是否有意義?或者我甚至需要擔心這一點,當它們的時鐘改變或不改變時它會全部排除?

回答

0
+0

不知道這將如何幫助我,因爲它使用硬編碼的日期。對?我希望做的是設置一個頁面,在接下來的5年內我不會碰到或擔心。 – user1601517

+0

不,硬編碼的日期只是測試日期,用於確定用戶所處的時區。唯一需要更新的時間是實際重新定義了時區,以便當前時區不是與2011年相同(顯然發生在明斯克白俄羅斯)。上一次發生在美國的是2007年,之前是1987年。 – Bill

1

我的約會擴展有方法來識別DST:

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

dateinstance .isDST()方法將返回 「真」,如果它出現的日期落在本地DST內, 「假」如果不。

但是總的想法既非常簡單,也非常可怕(因爲它實際上只是一個愚蠢的猜測)。基本上無論使用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中時(由於開始和結束時間的規則經常處於不斷變化的事實),通常會顯得無足輕重。

爲了您的需要,我覺得上面的代碼應該可以做到。

+0

不確定上述代碼對我有何幫助。你說我需要輸入一個日期來讓DST工作,但每年的日期都不一樣。它是這個月的第一個星期天......所以......這將如何工作? – user1601517

+0

你必須有一個上面的函數的例子日期工作。該函數會告訴您日期(您喜歡的任何日期)是否落在腳本運行區域內的DST(或類似日期)內。在你的情況下,我認爲這將是當前日期。你只關心他們現在需要的路線,正確 - 不是明年?當DST開始或結束時,代碼並不需要明確知道 - 它所做的只是將當前日期與知道不存在DST的日期進行比較。如果日期相同,則表示您不在DST之內,如果不同,則表示您在DST之內。 –