代码之家  ›  专栏  ›  技术社区  ›  umair.ashfr

如何在javascript中知道夏令时是否在特定日期[复制]

  •  0
  • umair.ashfr  · 技术社区  · 6 年前

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

    所以我要做的是用Javascript开发一个函数来确定在给定的日期(英国时区)是否启用了日光节约。

    我目前正在与力矩.js但不知道如何计算。任何帮助都将不胜感激。

    2 回复  |  直到 6 年前
        1
  •  0
  •   Code_Worm    6 年前

    你不需要为此使用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 更多细节

    快乐的编码

        2
  •  0
  •   kshetline    6 年前

    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');
    }