2013-09-22 66 views
2

我有兩個日期,想保存的天之間(加上開始和結束日期)陣列中的存儲日期對象數組

var date1 = new Date("Sep 23, 2013 12:00:00"); // Monday 
    var date2 = new Date("Sep 26, 2013 12:00:00"); // Thursday 

    var alldates = []; 

    for (var i=0; date1 <= date2; date1.setDate(date1.getDate() + 1), i++) { 
     alldates.push(date1); 
     } 

    alert(alldates.join('\n')); 

有了這個代碼alert(alldates.join('\n'));顯示以下

Fri Sep 27 2013 12:00:00 GMT+0200 
    Fri Sep 27 2013 12:00:00 GMT+0200 
    Fri Sep 27 2013 12:00:00 GMT+0200 
    Fri Sep 27 2013 12:00:00 GMT+0200 

我是Javascript新手,想要進一步瞭解,謝謝任何解釋爲什麼alert沒有顯示

Mon Sep 23 2013 12:00:00 GMT+0200 
    Tue Sep 24 2013 12:00:00 GMT+0200 
    Wed Sep 25 2013 12:00:00 GMT+0200 
    Thu Sep 26 2013 12:00:00 GMT+0200 

回答

8

您遇到的問題是您推薦對date1對象的引用。在循環中更改日期時,更新對象,但所有引用仍指向同一對象。

您需要可以把你的日期的文本表示,或者您date1對象的副本

for (var i=0; date1 <= date2; date1.setDate(date1.getDate() + 1), i++) { 
    alldates.push(new Date(date1)); 
    } 

alert(alldates.join('\n')); 

至於建議,while循環

while(date1 <= date2) { 
    alldates.push(new Date(date1)); 
    date1.setDate(date1.getDate() +1); 
} 
+1

'新的日期(日期1)'就足夠了,沒必要'的ToString()' – janos

+0

while循環會看起來更具可讀性imho –

+0

+1 while循環;) –

0

你的陣列存儲引用對於單個日期對象,並且每次調用setDate時,每個對象都使用新的日期值進行更新。

因此,這將更好地推動新的日期對象數組這樣,

var date1 = new Date("Sep 23, 2013 12:00:00"); // Monday 
var date2 = new Date("Sep 26, 2013 12:00:00"); // Thursday 

var alldates = []; 
// pushing first date 
alldates.push(new Date(date1.setDate(date1.getDate()))); 

for (var i=0; date1 <= date2; i++) { 

    alldates.push(new Date(date1.setDate(date1.getDate() + 1))); 
} 

alert(alldates.join('\n'));