2012-10-18 58 views
2

好吧,我知道如何檢查,如果某一天是DST-框內。但是,如果提供Date對象的系統已經處於DST模式且您不知道「正常」時區,那麼是否有任何方法可以獲取信息?用戶可能會關閉該功能,或者仍然需要重新啓動或類似的功能。大多數系統在SysAPI中提供某種標誌來檢查......是否有任何方法從js獲取這些信息?夏令時間與使用Javascript

回答

2

大概不會。

JavaScript語言(ECMAScript的第5版)不提供任何這樣的功能。

您可能可以從擴展名(如ActiveXObject)訪問它,但我懷疑是否有任何可靠的跨瀏覽器/跨平臺方式來檢測操作系統或用戶是否正在使用夏時制時間設置。

這個Microsoft Technet article演示瞭如何使用VBScript在幾個Windows版本上檢測DST(這在JScript中很可能類似),但是,這不太可能是您可以可靠地執行的操作(如果有的話,取決於你的用例的細節)。

+0

陛下...所以這聽起來像我的下一個容易實現,但是,從來沒有到得到實現的JS功能的請求...... -.- – rhavin

0

有沒有什麼辦法來獲取信息,如果已經在提供 日期對象的系統,DST-Mode是,你不知道「正常」 時區?

不知道我是否得到了問題的權利。基本上我只看到兩種可能性:

a)DST功能關閉或者時區沒有DST幀:我們總是知道標準時間,因爲沒有DST時間。

b)夏令時功能打開,時區存在DST幀:夏季和冬季的UTC偏移量不同,標準偏移量爲冬季禁播的標準偏移量,該值爲十二月(北半球)或6月(南半球)。

這應該給我們的信息:

function checkDST() { 

    var 
    now = new Date(); 
    year = now.getFullYear(), // current year 
    june = new Date(year, 5, 21, 12), // solistice 1 
    december = new Date(year, 11, 21, 12); // solistice 2 
    decTzo = december.getTimezoneOffset(), 
    junTzo = june.getTimezoneOffset(), 
    nowTzo = now.getTimezoneOffset(), 
    dstDiff = decTzo - junTzo, 
    msgNoDst = "Your system does not observe Daylight Savings. UTC offset: " + nowTzo, 
    msgDstN = "Northern hemisphere. UTC offset: " + nowTzo + ", standard offset: " + decTzo, 
    msgDstS = "Southern hemisphere. UTC offset: " + nowTzo + ", standard offset: " + junTzo; 

    if (dstDiff === 0) { return msgNoDst; } 
    if (dstDiff > 0) { return msgDstN; } 
    return msgDstS; 
} 

alert(checkDST()); 

- 如果偏移癸君差值爲正 - 例如對於柏林-60 - ( - 120)= +60 - 那麼位置在北半球,標準偏移量是十二月。
- 如果偏移癸君差值爲負 - 例如對於阿德萊德-630 - ( - 570)= -60 - 則位置在南半球,標準偏移量爲6月。