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

Using Moment.js to make an array of this week's dates doesn't add to array

本文关键字:数组 添加 日期 js Moment 周日期 使用      更新时间:2023-09-26

我正在使用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);

返回:

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)]

请注意,底部的数组是数组中的下一个日期重复了 7 次。

正如 danludwig 在对该问题的评论中提到的,您正在多次向数组添加对同一日期的引用。

从目前开始.js文档:

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

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

您应该在时刻日期对象上调用 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);

顺便说一句:

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