Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript中的momentJS无法正确添加天数_Javascript_Date_Momentjs - Fatal编程技术网

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

使用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); 我不知道为什么它少了几天。在每次迭代中,您都会在初

我有这个代码,我想从开始日期起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);

我不知道为什么它少了几天。

在每次迭代中,您都会在初始日期前添加
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