如何了解夏令时是否在javascript中的特定日期

时间:2018-07-15 06:00:22

标签: javascript momentjs

我正在为英国的用户开发基于Web的界面。目前,我们正在数据库中保存GMT时间。但是在前端,用户输入的英国日期时间需要转换为格林尼治标准时间。但是问题出在转换上。

所以我想做的是用Javascript开发一个函数,该函数确定给定日期(英国时区)是否启用夏令时。

我目前正在使用moment.js库,但不知道如何计算它。任何帮助将非常感激。

2 个答案:

答案 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

快乐的编码