使用 JS 检查 DST(夏令时)是否生效
Check if DST (Daylight Saving Time) is in Effect using JS
检查 DST(夏令时)是否生效:
- 创建 2 个日期 – 1 个在 1 月,1 个在 7 月。
- 使用该
getTimezoneOffset()
方法获取 2 个日期的时区偏移量。 - 检查两个值中的较大值是否不等于原始日期的偏移量。
索引.js
function hasDST(date = new Date()) { const january = new Date(date.getFullYear(), 0, 1).getTimezoneOffset(); const july = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); return Math.max(january, july) !== date.getTimezoneOffset(); } // 👇️ 1st of February 2022 console.log(hasDST(new Date(2022, 1, 1))); // 👉️ false // 👇️ 1st of September 2022 console.log(hasDST(new Date(2022, 8, 1))); // 👉️ true
我们创建了一个可重用的函数,它将一个Date
对象作为参数,并true
在 DST(夏令时)生效时返回,false
否则返回。
我们创建了 2 个Date
对象 – 1 个 inJanuary
和另一个 1 in July
。
我们传递给Date()构造函数的 3 个参数
是:
- 这
year
- 月份的从零开始的值(一月 = 0,二月 = 1,等等)
- 一个月中的第几天 (1 – 31)
getTimezoneOffset
方法返回一个日期(以 UTC 计算)与以访问者本地时区计算的相同日期之间的差异(以分钟为单位)。
对于观察 DST 的区域,该getTimezoneOffset
方法返回的偏移量January
将不同于 返回的偏移量July
。
该
getTimezoneOffset
方法在标准时间期间返回的值大于在夏令时期间返回的值。该Math.max()
函数采用两个或多个逗号分隔的数字并返回最大值。
索引.js
console.log(Math.max(3, 5, 8)); // 👉️ 8 console.log(Math.max(-5, 10, 3)); // 👉️ 10
因此,该Math.max()
函数将返回标准时间期间的值。
getTimezoneOffset
最后一步是将标准时间期间的值与在传入日期调用方法的输出进行比较。
如果这两个值不相等,则对传入的日期执行夏令时。
如果这两个值相等,则日期与标准偏移量匹配并且不遵守夏令时。
额外资源
您可以通过查看以下教程来了解有关相关主题的更多信息: