我正在为英国的用户开发基于Web的界面。目前,我们正在数据库中保存GMT时间。但是在前端,用户输入的英国日期时间需要转换为格林尼治标准时间。但是问题出在转换上。
所以我想做的是用Javascript开发一个函数,该函数确定给定日期(英国时区)是否启用夏令时。
我目前正在使用moment.js库,但不知道如何计算它。任何帮助将非常感激。
答案 0 :(得分:0)
我有一个自己的npm模块可以做到这一点,但是我不推荐这样做,因为我从来没有花太多时间来记录它,所以对我来说,现在只有一个人有用。
但是,这里是您可以使用的一种方法,使用moment.js:
1)获取相关日期开始的午夜时间。
2)获取第二天午夜发生的时间。
3)从第二次减去第一次。如果少于24小时,那将是时钟向前调整的时间,DST开始。如果少于24小时,那就是时钟倒回,DST结束了。还有什么是平常的一天。
更新:
另一个答案提供了一种确定在特定时间是否正在观察DST的好方法(在一些奇怪的情况下不是很完美)。我以为您遇到了另一个问题-时钟是否在特定日期更改了。如果对您而言很重要,可以通过以下方式完成:
function checkDate(year, month, day) { // Month from 1-12, not the weird 0-11 month
const startOfDay = +new Date(year, month - 1, day, 0, 0, 0, 0);
const endOfDay = +new Date(year, month - 1, day + 1, 0, 0, 0, 0);
const hours = (endOfDay - startOfDay) / 1000 / 3600;
if (hours < 24)
console.log('DST started');
else if (hours > 24)
console.log('DST ended');
else
console.log('No DST change');
}
答案 1 :(得分:0)
您无需为此使用moment.js。您可以使用以下代码
Date.prototype.stdTimezoneOffset = function () {
var jan = new Date(this.getFullYear(), 0, 1);
var jul = new Date(this.getFullYear(), 6, 1);
return Math.max(jan.getTimezoneOffset(), jul.getTimezoneOffset());
}
Date.prototype.isDstObserved = function () {
return this.getTimezoneOffset() < this.stdTimezoneOffset();
}
var today = new Date();
if (today.isDstObserved()) {
alert ("Daylight saving time!");
}
有关更多详细信息,请参见How to check if the DST (Daylight Saving Time) in javascript
快乐的编码