繁体   English   中英

日期不随object.setDate()更改

[英]Date not changing with object.setDate()

我正在尝试创建具有星期,天和小时的日历对象,其中每天都有一个日期。 我将开始日期设置为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);
    }
}

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

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

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

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

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

也可以这样写:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM