夏令时与Javascript

时间:2012-10-18 16:33:53

标签: javascript date dst

好的,我知道如何检查某一天是否在DST帧内。但是,如果提供Date-object的系统已经处于DST模式并且您不知道“正常”时区,是否有任何方法可以获取信息?用户可能会关闭该功能,或者仍然需要重启或类似的功能。大多数系统在SysAPI中提供某种标志来检查......有没有办法从js获取该信息?

2 个答案:

答案 0 :(得分:2)

可能不是。

JavaScript语言(ECMAScript第5版)不提供任何此类功能。

您可以从ActiveXObject等扩展程序访问它,但我怀疑是否有任何可靠的跨浏览器/跨平台方法来检测操作系统或用户是否正在使用任何夏令时设置。 / p>

这个Microsoft Technet article演示了如何使用VBScript在Windows的几个版本上检测DST(这可能类似于JScript),但同样,这不太可能是你可以做到的(如果有的话,取决于您的用例的具体情况。)

答案 1 :(得分:0)

  如果系统提供信息,有没有办法获取信息   日期对象已经处于DST模式,您不知道正常情况'   时区?

不确定我的问题是否正确。基本上我只看到两种可能性:

a)DST功能关闭或时区根本没有DST帧:我们总是知道标准时间,因为没有DST时间。

b)DST功能已打开且时区存在DST帧:夏季和冬季的UTC偏移量不同,标准偏移量是冬季 - 固定,即12月(北半球)或六月(南半球)。

这应该给我们提供信息:

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());

- 如果偏移量dec-jun的差异是正的 - 例如对于柏林-60 - ( - 120)= +60 - 然后位置在北半球,标准偏移是12月的。 - 如果偏差dec-jun的差异是负的 - 例如对于阿德莱德-630 - ( - 570)= -60 - 然后位置在南半球,标准偏移是6月的。