javascript - 为什么我的代码中的 Javascript 未检测到夏令时?

标签 javascript date dst

我已经尝试使用下面的代码来检测是否遵守了夏令时,但是尽管它开启了,但它总是说没有遵守。

var myDate = new Date();
document.write(myDate.getTimezoneOffset());
var rightNow = new Date();
var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
var temp = jan1.toUTCString();
var jan2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var std_time_offset = (jan1 - jan2) / (1000 * 60 * 60);
var june1 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
temp = june1.toUTCString();
var june2 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
var daylight_time_offset = (june1 - june2) / (1000 * 60 * 60);
var dst;
if (std_time_offset == daylight_time_offset) {
    dst = "0"; // daylight savings time is NOT observed
} else {
    dst = "1"; // daylight savings time is observed
}

无论我使用哪种方式,它目前都返回“not oberserved”。 (不能在这里添加所有方法,因为它会太长问题)

因此,我只想确认:

  1. 这需要在我的机器上进行任何设置吗?
  2. 您是否必须在任何特定国家/地区才能观察到这一点?

最佳答案

该代码对于它需要做的事情来说似乎真的很复杂。这是一个简单的函数,它做出与您所做的相同的假设(DST 在当年的 1 月 1 日无效)并检测 DST 是否对给定的 Date 实例有效:

function isDST(dt) {
  // Northern or southern hemisphere?
  // NOTE: Assumes that Jan 1st (southern hemisphere) or July 1st (northern hemisphere) will be DST
  // This may be a "good enough" assumption, but if not, you'll need to download timezone information
  const jan1 = new Date(dt.getFullYear(), 0, 1);
  const jul1 = new Date(dt.getFullYear(), 6, 1);
  const ref = jan1.getTimezoneOffset() < jul1.getTimezoneOffset() ? jul1 : jan1;
  return dt.getTimezoneOffset() !== ref.getTimezoneOffset();
}
console.log(isDST(new Date(2018, 6, 1))); // true (if July 1st is DST in your timezone)
console.log(isDST(new Date(2018, 1, 1))); // false (if Feb 1st is not DST in your timezone)

它利用了 getTimezoneOffset 在 DST 生效时包含 DST 偏移这一事实。

当然,如果一个位置应该更改它在两个日期之间永久所在的时区,它会给出误报,但这种情况相对较少发生。

关于javascript - 为什么我的代码中的 Javascript 未检测到夏令时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49611201/

相关文章:

javascript - Canvas 摆动动画 - Canvas 平移

javascript - 使用 THREE.ImageUtils.loadTexture 和 Three.js 出现 404 错误

javascript - Javascript中的年份字符串

date - gin/golang gin-gonic 不解析时间。unix json 的正确时间?

mysql - 预订日期范围 mysql php

javascript - 无法在 2012/10/20 提前一天

javascript - Passport 的注销功能会删除 cookie 吗?如果没有,它是如何工作的?

javascript - 如何从外部更改vue应用程序的属性

php - 我应该如何确定 Perl 中时区的下一个夏令时 (DST) 转换?

java - 如何检测 Joda Time 中不明确的 DST 重叠?