JavaScript 中的 momentJS 未正确添加天数

Days are not added properly with momentJS in JavaScript

我有这个代码,我想在接下来的 15 天从开始日期开始

    var fortnightStart = moment("15 04 2015", "DD MM YYYY");

    for (var i = 1; i <= 15; i++) {

        dates.push(fortnightStart.add(i, "days").format("D MMM"));

    }

    console.log(dates);

这是输出

["16 Apr", "18 Apr", "21 Apr", "25 Apr", "30 Apr", "6 May", "13 May", "21 May", "30 May", "9 Jun", "20 Jun", "2 Jul", "15 Jul", "29 Jul", "13 Aug"]

不知为何不见了几天

在每次迭代中,您都会将 i 天添加到初始日期 - 因此它会不断累积(+1、+2、+3 等)。您需要添加的不是 i,而是简单的 1fortnightStart.

var fortnightStart = moment("15 04 2015", "DD MM YYYY");
for (var i = 1; i <= 15; i++) {
    // 1, not i
    dates.push(fortnightStart.add(1, "days").format("D MMM"));
}
console.log(dates);

问题是 .add 修改了传入的对象而不是创建新日期。要使您的代码保持其原始样式,您需要 clone the date 添加之前。

dates.push(fortnightStart.clone().add(i, "days").format("D MMM"));

或者:

dates.push(moment(fortnightStart).add(i, "days").format("D MMM"));

您缺少日期的原因是 'date.add' 更改了当前变量。例如

date = moment("15 04 2015", "DD MM YYYY");
date.add(1, "days");
console.log(date); // This will give you "16 04 2015"

为了让您的代码正常工作,您需要确保:

1) 'add' 方法不会通过添加到克隆来更改您的原始值。例如

dates.push(fortnightStart.clone().add(i, "days").format("D MMM"));

2) 如果 'i' 天,则每个循环只增加 1 天。例如

dates.push(fortnightStart.clone().add(1, "days").format("D MMM"));