使用Moment.js制作本周日期的数组不会添加到数组中

Chr*_*ris 5 javascript arrays momentjs

我正在使用Moment.js创建一个资源日历,我需要一周的日期数组.我当前函数的控制台日志打印出来,但是每个日期推入的数组都是错误的.

    var startOfWeek = moment().startOf('week');
    var endOfWeek = moment().endOf('week');

    var days = [];
    var day = startOfWeek;

    do {
        console.log(day._d);
        days.push(day._d);
        day = day.add(1, 'd');
    }
    while (day <= endOfWeek);

    console.log(days);
Run Code Online (Sandbox Code Playgroud)

返回:

Sun Jan 18 2015 00:00:00 GMT-0500 (EST) schedule.js?320233fd69f9859ccb55248b608e15891032b17d:31
Mon Jan 19 2015 00:00:00 GMT-0500 (EST) schedule.js?320233fd69f9859ccb55248b608e15891032b17d:31
Tue Jan 20 2015 00:00:00 GMT-0500 (EST) schedule.js?320233fd69f9859ccb55248b608e15891032b17d:31
Wed Jan 21 2015 00:00:00 GMT-0500 (EST) schedule.js?320233fd69f9859ccb55248b608e15891032b17d:31
Thu Jan 22 2015 00:00:00 GMT-0500 (EST) schedule.js?320233fd69f9859ccb55248b608e15891032b17d:31
Fri Jan 23 2015 00:00:00 GMT-0500 (EST) schedule.js?320233fd69f9859ccb55248b608e15891032b17d:31
Sat Jan 24 2015 00:00:00 GMT-0500 (EST) schedule.js?320233fd69f9859ccb55248b608e15891032b17d:31
[Sun Jan 25 2015 00:00:00 GMT-0500 (EST), Sun Jan 25 2015 00:00:00 GMT-0500 (EST), Sun Jan 25 2015 00:00:00 GMT-0500 (EST), Sun Jan 25 2015 00:00:00 GMT-0500 (EST), Sun Jan 25 2015 00:00:00 GMT-0500 (EST), Sun Jan 25 2015 00:00:00 GMT-0500 (EST), Sun Jan 25 2015 00:00:00 GMT-0500 (EST)]
Run Code Online (Sandbox Code Playgroud)

注意底部的数组是如何重复7次数组中的下一个日期.

Tay*_*nan 25

正如danludwig在他对这个问题的评论中所提到的,你是多次向数组添加同一日期的引用.

Moment.js文档:

应该注意的是,时刻是可变的.调用任何操作方法都会改变原始时刻.

如果要创建副本并对其进行操作,则应在操作时刻之前使用#cron时刻.

你应该调用clone的瞬间日期对象的功能,如图这里.

var startOfWeek = moment().startOf('week');
var endOfWeek = moment().endOf('week');

var days = [];
var day = startOfWeek;

while (day <= endOfWeek) {
    days.push(day.toDate());
    day = day.clone().add(1, 'd');
}

console.log(days);
Run Code Online (Sandbox Code Playgroud)

作为旁白:

不应该引用第三方库的内部字段/功能.这些引用的名称比文档中描述的公共API更可能发生更改._d可以通过调用public函数 来引用toDate.