2013-12-17 70 views
0

有人可以幫我理解爲什麼我從這個JavaScript函數獲得輸出嗎?查找上一個和下一個日期

mod.getAdjacentDates = function (year, month, date) { 
    var prevDate = new Date(year, month, date); 
    var nextDate = new Date(year, month, date); 

    prevDate.setDate(date - 1); 
    nextDate.setDate(date + 1); 

    var data = { 
     prevDate: prevDate.getDate(), 
     prevMonth: prevDate.getMonth() + 1, 
     prevYear: prevDate.getFullYear(), 
     nextDate: nextDate.getDate(), 
     nextMonth: nextDate.getMonth() + 1, 
     nextYear: nextDate.getFullYear() 
    }; 

    alert(year + '-' + month + '-' + date + ' ' + JSON.stringify(data)); 

    return data; 
}; 

我從警報得到的輸出是:

2013-12-17 
{ 
    "prevDate":16, 
    "prevMonth":1, 
    "prevYear":2014, 
    "nextDate":20, 
    "nextMonth":6, 
    "nextYear":2014 
} 

我希望得到以下輸出:

2013-12-17 
{ 
    "prevDate":16, 
    "prevMonth":12, 
    "prevYear":2013, 
    "nextDate":18, 
    "nextMonth":12, 
    "nextYear":2013 
} 
+1

日期是參數中的字符串? –

+1

這不是我得到的輸出:http://jsfiddle.net/nFbBW/ – Moob

+0

@eicto可能在這裏有一個點,我認爲我的第二個日期是試圖將日期設置爲'171'。乾杯! –

回答

2

當我嘗試你的代碼我得到:如果您創建一個月份值的日期

var prevDate = new Date(year, month - 1, date); 
var nextDate = new Date(year, month - 1, date); 

{ 
    "prevDate":16, 
    "prevMonth":1, 
    "prevYear":2014, 
    "nextDate":18, 
    "nextMonth":1, 
    "nextYear":2014 
} 

你需要減一月份,當您創建的日期也的12,它會溢出到一年,以便它成爲明年一月的日期。

+0

謝謝,這看起來好多了,'prevDate'現在是爆炸性的,但不是'nextDate'? –

+0

@AdrianThompsonPhillips:如果您沒有得到正確的下一個日期,那麼您的實際代碼與您發佈的代碼不同。我在測試時得到正確的日期:http://jsfiddle.net/Guffa/s3D62/ – Guffa

1

#.getMonth()是從零開始的,而其餘的都是基於1。