我已经尝试使用下面的代码来检测是否遵守了夏令时,但是尽管它开启了,但它总是说没有遵守。
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”。 (不能在这里添加所有方法,因为它会太长问题)
因此,我只想确认:
- 这需要在我的机器上进行任何设置吗?
- 您是否必须在任何特定国家/地区才能观察到这一点?
最佳答案
该代码对于它需要做的事情来说似乎真的很复杂。这是一个简单的函数,它做出与您所做的相同的假设(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/