为什么我在使用 add 方法时夏令时增加了 5 小时而不是 4 小时,我该如何解决?

Why i get added 5 hours instead 4 on daylight saving time when i use the add method and how can i resolve it?

我需要将 4 小时添加到我的时刻 js 日期。所以为此我正在使用

/* this timestamp is this date 27-03-2045 00:00 */
const someday = moment(2374178400000);
const addedFourHours = someday.add(4, 'hours'); 

3 月 27 日夏令时已经过去,我刚好添加了 4 个小时,addedFoursHours 中的结束日期是 Mon Mar 27 2045 04:00:00 GMT+0200

但是当我尝试 DST 发生的日期时,例如 3 月 26 日午夜

/* this timestamp is this date 26-03-2045 00:00  */ 
const someday = moment(2374095600000);
const addedFourHours = someday.add(4, 'hours');

然后我得到 Sun Mar 26 2045 05:00:00 GMT+0200。在之前的案例中,我在午夜后 4 小时添加了 04:00 时间。为什么在 DST 时间我得到 05:00 时间?

我该如何解决这个问题?

你想要的实际上不是 4 小时,而是找到下一个时间是 4 的倍数的时间。

因此,从您的代码中删除所有建议您添加四个小时(参见您的变量名称)。

你可以这样做:

const someday = moment(2374095600000);
console.log(someday.toString());
const hours = someday.hours();
someday.hours(hours + 4 - (hours % 4)); // Find next time that is multiple of 4.
console.log(someday.toString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>

您想要根据日期添加 3、4 或 5 小时,但您想要为小时数设置特定值。读取小时值,加4并设置值:

const today = moment(2374178400000);
const four = moment(today).hours(today.hour() + 4);
const eight = moment(four).hours(four.hour() + 4);
const twelve = moment(eight).hours(eight.hour() + 4);
const sixteen = moment(twelve).hours(twelve.hour() + 4);
const twenty = moment(sixteen).hours(sixteen.hour() + 4);
const tomorrow = moment(twenty).hours(twenty.hour() + 4);

console.log(today);
console.log(four);
console.log(eight);
console.log(twelve);
console.log(sixteen);
console.log(twenty);
console.log(tomorrow);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.3/moment.min.js"></script>