Moment.js - 如何检测夏令时并添加一天

ac3*_*360 25 javascript date momentjs

我需要从2000年以来每天每小时从日期数据字符串创建日期对象.

字符串看起来像这样每小时,Month/Day/Year Hour格式......

"04/02/2000 01", "04/02/2000 02", "04/02/2000 03" ...all the way to... "04/02/2000 24"
Run Code Online (Sandbox Code Playgroud)

现在,我有以下代码,除了夏令时的日子以外工作正常...

  // Split At Space
var splitDate = "04/02/2000 24".split(/[ ]+/);
var hour = splitDate[1];
var day  = splitDate[0];
  // Split At Slashes
var dayArray = day.split("/");
if (hour === "24") {
       // Months are zero-based, so subtract 1 from the month
     date = new Date(Date.UTC( dayArray[2], parseInt(dayArray[0] - 1), dayArray[1], 0, 0, 0 ));
     date.setDate(date.getDate() + 1);
} else {
     // Months and Hours are zero-based, so subtract 1 from each
     date = new Date(Date.UTC( dayArray[2], parseInt(dayArray[0] - 1), dayArray[1], hour, 0, 0 ));
};
Run Code Online (Sandbox Code Playgroud)

在夏令时04/02/2000的日子里,如果是小时,就像增加一天一样不起作用24.相反,它只是返回Sun, 02 Apr 2000 23:00:00 GMT

使用Moment.js,是否可以检测到DST日并使此代码正常工作?

ada*_*amb 42

要检测DST,请使用以下.isDST()方法:http://momentjs.com/docs/#/query/is-daylight-saving-time/

moment([2011, 2, 12]).isDST(); // false, March 12 2011 is not DST
moment([2011, 2, 14]).isDST(); // true, March 14 2011 is DST
Run Code Online (Sandbox Code Playgroud)

使用此测试,您应该能够确定如何相应地修改程序的行为.

  • 值得一提的是,isDST()取决于国家和地区.给出的例子对比利时都是假的.http://www.timeanddate.com/time/dst/2011.html (8认同)
  • 我尝试了这段代码,它们都返回 false。我从实行夏令时的佛罗里达州运行它。我错过了什么?需要设置地区吗? (3认同)