使用JavaScript中的momentJS无法正确添加天数
我有这个代码,我想从开始日期起15天内得到它使用JavaScript中的momentJS无法正确添加天数,javascript,date,momentjs,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); 我不知道为什么它少了几天。在每次迭代中,您都会在初
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);
我不知道为什么它少了几天。在每次迭代中,您都会在初始日期前添加
I
天,因此它会不断累积(+1、+2、+3等)。您不需要将i
添加到fortwnightstart
中,只需将1
添加到
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);
var两周开始=时刻(“2015年4月15日”、“年月日”);
对于(var i=1;i在每次迭代中,您将i
天添加到初始日期-因此它不断累积(+1、+2、+3等)。您不需要添加i
,只需将1
添加到两周开始
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);
var两周开始=时刻(“2015年4月15日”、“年月日”);
对于(var i=1;i而言,问题在于.add
修改传入的对象,而不是创建新的日期。要使代码保持其原始样式,您需要在添加之前进行修改
dates.push(fortnightStart.clone().add(i, "days").format("D MMM"));
或:
问题是,.add
修改传入的对象,而不是创建新的日期。要使代码保持其原始样式,需要在添加之前进行修改
dates.push(fortnightStart.clone().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) “添加”方法不会通过添加到克隆来更改原始值
dates.push(fortnightStart.clone().add(i, "days").format("D MMM"));
或
2) 如果是“i”天,则每个循环只添加1天。e、 g
dates.push(fortnightStart.clone().add(1, "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) “添加”方法不会通过添加到克隆来更改原始值。e、 g
dates.push(fortnightStart.clone().add(i, "days").format("D MMM"));
或
2) 如果是“i”天,则每个循环只添加1天。e、 g
dates.push(fortnightStart.clone().add(1, "days").format("D MMM"));
.add()
函数修改力矩(日期)对象。.add()
函数修改力矩(日期)对象。这是可行的,但正如其他人所指出的,您需要知道.add()
正在改变基准日期。此循环工作的唯一原因是您将格式化字符串推入日期数组,而不是实际时刻。如果您将.format()
删除,您将得到一系列对同一时刻的引用。@smcrohan完全同意您的看法。另一个选项是在添加日期之前创建新的日期对象或克隆fortwnightstart
。这是可行的,但正如其他人所指出的,您需要知道.add()
正在改变基准日期。此循环工作的唯一原因是您将格式化字符串推入日期数组,而不是实际时刻。如果您将.format()
删除,您将得到一系列对同一时刻的引用。@smcrohan完全同意您的看法。另一个选项是在添加日期之前创建新的日期对象或克隆fortwnightstart
。