好的,我知道如何检查某一天是否在DST-frame中。但是,如果提供日期对象的系统已经处于DST模式,并且您不知道“正常”时区,那么有什么方法可以获取信息吗?用户可能会关闭该功能,或者仍然需要重新启动或类似的事情。大多数系统在SysAPI中提供某种标志来检查…有没有办法从js那里得到这些信息?
发布于 2012-10-19 00:38:29
可能不会。
JavaScript语言(ECMAScript第5版)没有提供任何这样的功能。
您也许能够通过ActiveXObject等扩展访问它,但我怀疑是否有任何可靠的、跨浏览器/跨平台的方法来检测操作系统或用户是否正在使用任何夏令时设置。
这个Microsoft Technet article演示了如何使用VBScript在几个版本的Windows上检测DST (这很可能与JScript中的类似),但是,同样,这不太可能是你可以可靠地做的事情(如果有的话,取决于你的用例的具体情况)。
发布于 2014-04-14 02:18:02
如果提供日期对象的系统已经处于DST模式,而您不知道“正常”时区,
有什么方法可以获取信息吗?
我不确定我的问题是否正确。基本上,我只看到两种可能性:
a) DST功能关闭或时区根本没有DST帧:我们总是知道标准时间,因为没有DST时间。
b)打开DST功能,并且存在时区的DST帧:夏季和冬季日光的UTC偏移量是不同的,标准偏移量是冬季日光的标准偏移量,即在12月(北半球)或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());-如果偏移量dec-jun的差值为正-例如,对于柏林-60-(-120) = +60,则位置在北半球,标准偏移量为12月。
-如果偏移量12月-6月的差值为负-例如,对于阿德莱德-630-(-570) = -60,则位置在南半球,标准偏移量为6月。
https://stackoverflow.com/questions/12959420
复制相似问题