使用JavaScript中的momentJS无法正确添加天数

use*_*546 1 javascript date momentjs

我有这个代码,我希望从开始日期开始接下来的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);
Run Code Online (Sandbox Code Playgroud)

这是输出

["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"]
Run Code Online (Sandbox Code Playgroud)

我不知道为什么它错过了几天.

Yau*_*nok 6

在每次迭代中,您都会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);
Run Code Online (Sandbox Code Playgroud)

  • 这是有效的,但正如其他人指出的那样,你需要知道`.add()`正在改变基准日期.这个循环工作的唯一原因是你将格式化的字符串推入日期数组,而不是实际的时刻.如果你要删除`.format()`,那么你最终会得到一个对同一时刻的许多引用的数组. (2认同)