2016-09-15 6 views
2

실제로 배열에 넣는 날짜가 콘솔에서 배열을 호출 할 때 나오는 날짜가 아닌 이유를 실제로 알 수 없습니다. 즉, 배열의 첫 번째 항목이 두 개의 경고 호출에서 되돌아 오는 오늘의 날짜가 될 것으로 예상하지만 배열의 첫 번째 위치를 확인하면 대신 어제의 날짜가 나타납니다.날짜가 배열로 채우기

function sevenDayPeriod(date) { 

    for (var i = 0; i <=6; i++) { 

     alert(date); //check to see date is today's date 
     dateRange[i] = date; 
     alert(dateRange[i]); //confirm that what I've pushed to array is today's date 

     date = date.setDate(date.getDate() - 1); 
     date = new Date(date); 
    } 
}; 

var dateRange = []; 
var today = new Date(); 

sevenDayPeriod(today); 

감사

date (기준)로 i 번째 배열 요소 세트 상기 상기 제 1 라인에

답변

6
... 
dateRange[i] = date; 
alert(dateRange[i]); //confirm that what I've pushed to array is today's date 
date = date.setDate(date.getDate() - 1); 
... 

, 당신이 그것을 표시하고 이후에는 결과 setDate와 같은 객체를 변경 문제는 배열 요소가 여전히 수정 된 객체를 가리키고 있기 때문입니다.
예를 들면 다음과 같이 해결할 수 있습니다. 당신이 날짜를 수정하면 이전에 배열로 밀어 너무

... 
var prevDay = new Date(); 
prevDay.setDate(date.getDate() - 1); 
date = prevDay; 
... 

또는 그것의 복사본을 만들 같은 다른 VAR와

+3

설명해 주셔서 감사합니다. 완벽한 의미와 희망을 가지고 내가 배울 점이 있습니다! –

2

function sevenDayPeriod(date) { 
 
    for (var i = 0; i <=6; i++) { 
 
\t //date object is as a "pointer", you have to clone it 
 
\t var copiedDate = new Date(date); 
 
\t \t 
 
     //alert(date); //check to see date is today's date 
 
     dateRange[i] = copiedDate; 
 
     //alert(dateRange[i]); //confirm that what I've pushed to array is today's date 
 
\t \t 
 
     date = date.setDate(date.getDate() - 1); 
 
     date = new Date(date); 
 
    } 
 
}; 
 

 
var dateRange = []; 
 
var today = new Date(); 
 

 
sevenDayPeriod(today); 
 

 
console.log(dateRange);

, 당신은 또한 것입니다 밀린 날짜 변경. 당신은 그것을 복제해야합니다.