2014-01-17 57 views
0

爲什麼我會像2021那樣得到意想不到的年份?使用日期對象for循環時得到意想不到的年份

var dueDates = []; 
var dDate = '2014-01-01'; 

dDate = new Date(dDate); 

for (var i = 1; i <= 18; i++) { 

    dDate.setMonth(i); 
    dueDates.push(dDate); 

} 
console.log(dueDates); 

DEMO http://jsfiddle.net/gQ92L/

+2

你期望'dDate.setMonth(18);'做什麼? –

+0

Bahahahahaha。總共12個月,我的朋友。不是18. – Dutchie432

+0

我想得到18個日期我也設置日期爲25到所有日期 – underscore

回答

3

有兩個問題的代碼。

  1. 您正在將相同的Date對象反覆推向數組,因此您最終會得到一個數組完整的對單個Date對象的引用。

  2. 您一再將月份值設置爲高於11的值,這樣也會推動未來幾年。當你做setMonth(12)你在2015年1月結束,當你對做setMonth(13)你在2016年二月結束了在你是高達2​​021

創建一個新的Date對象每次迭代結束時,並設置了一個月,讓你總是從同日起:

var dueDates = []; 
var dDate = '2014-01-01'; 

dDate = new Date(dDate); 

for (var i = 1; i <= 18; i++) { 

    var d = new Date(dDate.getTime()); 
    d.setMonth(i); 
    dueDates.push(d); 

} 
console.log(dueDates); 

注意:當你開始用setMonth(1)將在2月。如果你想從一月份開始,你必須從零開始。

+0

你是男人。感謝它的完美,並學習了很多新東西 – underscore

相關問題