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