Момент.js - как определить летнее время и добавить один день

мне нужно создать объекты даты из строк данных даты для каждого часа каждого дня с 2000 года.

строки выглядят так каждый час, в ...

"04/02/2000 01", "04/02/2000 02", "04/02/2000 03" ...all the way to... "04/02/2000 24"

теперь у меня есть следующий код, который отлично работает, за исключением дней с летним временем...

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

в дни с летнего времени, как 04/02/2000 добавление дня не работает, если час 24. Вместо этого он просто возвращается Sun, 02 Apr 2000 23:00:00 GMT

С Момента.js, можно ли обнаружить день DST и заставить этот код работать правильно?

2 ответов


для обнаружения 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

используя этот тест, вы сможете определить, как соответствующим образом изменить поведение вашей программы.


вот как я сделал небольшую проверку:

// example date picked by user
var dateStr = "30.03.2019";

// check if date is the date where DST starts or ends
var isDstChangeDay = moment(dateStr, "DD.MM.YYYY").isDST() !== moment(dateStr, "DD.MM.YYYY").add(1, "day").isDST();

console.log("DST will change on selected date:", isDstChangeDay);