【问题标题】:How to know if Daylight Saving Time was on a specific date in javascript [duplicate]如何知道夏令时是否在javascript中的特定日期[重复]
【发布时间】:2018-12-23 01:10:32
【问题描述】:

我正在为英国用户开发一个基于 Web 的界面。目前,我们在我们的数据库中保存了 GMT 时间。但在前端,用户正在输入需要转换为 GMT 的英国日期时间。但问题在于转换。

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

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

【问题讨论】:

  • 您是否从 momentjs 中查看了 isDST。我认为它简单易用。
  • 我确实看过了。但问题是我在英国以外的地方工作。除非有办法将我的默认时区设置为英国(我想目前 moment.js 将操作系统时间作为默认时区。) isDST 不会将其返回给英国。
  • @Emissary,我确实看过那个帖子。可能是我真的不明白夏令时。但是,如果我错了,请再次纠正我。这些功能仅适用于浏览器当前时区,不适用于英国。我的整个问题是我想要相同类型的函数,它不会为浏览器时区返回 DST,但对于英国
  • @umair.ashfr,您找到解决方案了吗?
  • @BVS,我使用的解决方案是在服务器端而不是客户端确定 DST。

标签: javascript momentjs


【解决方案1】:

你不需要为此使用 momentjs。你可以使用下面的代码

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了解更多详情

快乐编码

【讨论】:

  • 感谢您的回答,我确实看了一下。但我有一个问题(可能我仍然对这个 DST 概念感到困惑)。上述功能对英国时区有效吗?我的意思是,如果我的浏览器在英国以外(比如说印度),我如何将时区设置为英国。这真的让我心烦意乱。
  • JavaScript 仅本地处理 UTC(不是英国时间,因为 UTC 没有 DST)或浏览器的一个本地时区。如果你想为纽约或东京的人显示英国时间,你肯定需要像 moment.js 这样的东西。
【解决方案2】:

我有一个自己的 npm 模块可以做到这一点,但我不能推荐它,因为我从来没有花时间记录它,所以它现在对除了我以外的任何人都有用。

但是,您可以采用以下一种方法,使用 moment.js:

1) 获取相关日期开始时的午夜发生的时间。

2) 获取第二天午夜的时间。

3) 第二次减去第一次。如果不到 24 小时,那就是时钟拨快的时间,DST 开始了。如果不到 24 小时,那就是时钟倒转的时间,夏令时结束。其他的都是普通的一天。

更新:

另一个答案提供了一种确定是否在特定时间观察到 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');
}

【讨论】:

  • 你能用一个小例子详细说明一下吗?这真的很有帮助
猜你喜欢
  • 2013-05-25
  • 2015-09-17
  • 2023-03-18
  • 2018-12-12
  • 2014-10-27
  • 1970-01-01
  • 2021-03-04
  • 2013-11-16
  • 2011-05-12
相关资源
最近更新 更多