使用object.setDate()更改日期

时间:2017-01-30 15:23:57

标签: javascript date

我正在尝试创建一个包含数周,数天和数小时的日历对象,其中每天都有一个日期。我将开始日期设置为2017年1月2日。但是在完成循环后,日历中的所有日期都是2018年1月2日。

var calendar = {};
var date = new Date(2017,0,2);

calendar['weeks'] = [];
for (var w = 0; w < 52; w++) {
    calendar['weeks'][w] = {};
    calendar['weeks'][w]['number'] = w+1; 
    calendar['weeks'][w]['days'] = [];
    for (var d = 0; d < 7; d++) {
        calendar['weeks'][w]['days'][d] = {};
        calendar['weeks'][w]['days'][d]['date'] = date;
        calendar['weeks'][w]['days'][d]['hours'] = [];
        calendar['weeks'][w]['days'][d]['number'] = d+1; 
        for (var h = 0; h < 24; h++) {
            calendar['weeks'][w]['days'][d]['hours'][h] = {};
            calendar['weeks'][w]['days'][d]['hours'][h]['number'] = h+1;
        }
        date.setDate(date.getDate()+1);
    }
}

1 个答案:

答案 0 :(得分:4)

您只有一个 date个对象。当您在该循环中一遍又一遍地将其链接到calendar对象时,每个引用都指向同一个对象。

您需要在每次迭代时创建新实例:

    date = new Date(date);
    date.setDate(date.getDate() + 1);

或者,在设置“date”属性时创建一个新实例:

    calendar['weeks'][w]['days'][d]['date'] = new Date(date);

也可以写成:

    calendar.weeks[w].days[d].date = new Date(date);