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 日期不随对象更改。setDate()_Javascript_Date - Fatal编程技术网

Javascript 日期不随对象更改。setDate()

Javascript 日期不随对象更改。setDate(),javascript,date,Javascript,Date,我正在尝试创建一个包含周、日和小时的日历对象,其中每天都有一个日期。我把开始日期定在1月2日。2017年,但循环完成后,日历中的所有日期均为1月2日。2018. var calendar = {}; var date = new Date(2017,0,2); calendar['weeks'] = []; for (var w = 0; w < 52; w++) { calendar['weeks'][w] = {}; calendar['weeks'][w]['n

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

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);
    }
}
var-calendar={};
var日期=新日期(2017,0,2);
日历['周]=[];
对于(var w=0;w<52;w++){
日历['weeks'][w]={};
日历['weeks'][w]['number']=w+1;
日历['周][w]['天]=[];
对于(变量d=0;d<7;d++){
日历['周][w]['天][d]={};
日历['weeks'][w]['days'][d]['date']=日期;
日历['周][w]['天][d]['小时]=[];
日历['周][w]['天][d]['数字]=d+1;
对于(var h=0;h<24;h++){
日历['周][w]['天][d]['小时][h]={};
日历['weeks'][w]['days'][d]['hours'][h]['number']=h+1;
}
date.setDate(date.getDate()+1);
}
}

您只有一个日期对象。当您在该循环中将其反复链接到
日历
对象时,每个引用都指向同一对象

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

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

请注意,您可以编写
calendar.weeks
而不是
calendar['weeks']
,因为set*方法返回新的时间值:
calendar.weeks[w].days[d].date=new date(date.setDate(date.getDate()+1))
将一次性递增并复制。;-)