好的,我知道如何检查某一天是否在 DST 框架内。但是,如果提供日期对象的系统已经处于 DST 模式并且您不知道“正常”时区,是否有任何方法可以获取信息?用户可能会关闭该功能或仍然需要重新启动或类似的东西。大多数系统在 SysAPI 中提供了某种标志来检查……有没有办法从 js 中获取这些信息?
2 回答
可能不是。
JavaScript 语言(ECMAScript 第 5 版)不提供任何此类功能。
您可能可以从诸如 ActiveXObject 之类的扩展中访问它,但我怀疑是否有任何可靠的、跨浏览器/跨平台的方法来检测操作系统或用户是否正在使用任何夏令时设置。
这篇Microsoft Technet 文章演示了如何使用 VBScript 在几个版本的 Windows 上检测 DST(这在 JScript 中可能类似),但同样,这不太可能是您可以可靠地做到的(如果有的话,取决于具体情况你的用例)。
如果提供日期对象的系统已经处于 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 月。