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
,而是简单的 1
到 fortnightStart
.
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"));
我有这个代码,我想在接下来的 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
,而是简单的 1
到 fortnightStart
.
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"));