2016-03-14 37 views
0

我有這樣的代碼:爲什麼這個datetime函數setMonth的結果是錯誤的?得到月()+ 1

var nextDate = new Date("2016 01 31"); 
nextDate.setMonth(nextDate.getMonth() + 1); 

我期待的結果是Feb 28 2016,但它表明Mar 02 2016代替。

爲什麼?有沒有解決方案?

+1

看看這個問題:http://stackoverflow.com/questions/21490366/setmonth1-gives-me-march和一些解釋在這裏:http://stackoverflow.com/a/14680430/5119765 –

+0

在Safari ,'new Date(「2016 01 31」)'返回一個無效日期,所以你的第一個問題是正確解析字符串。 – RobG

回答

0

這是因爲2月份有29天,並且當你從1月份開始,有31天的新月份到2月份,那麼這兩天的差額將轉移到另一月份。 簡單的方法就是創建新的Date實例。

您可能需要執行一些邏輯,以獲得相應的日期權

0

有隻有29天月,因此,2月31日日將轉化爲火星2

您需要更新天你的日期對象到那個月的最後一天。

function daysInMonth(month,year) { 
 
    return new Date(year, month, 0).getDate(); 
 
}

0

與助手功能可能的解決辦法:您可以通過指定設置日期爲0的功能得到了一個月的最後一天setMonth後,檢查結果沒有按」 t包含等於預期月份的月份,如果是,則使用setDate(0),該日期將日期設置爲上個月的最後一天。例如

Date.prototype.addMonths = function(months){ 
 
    var m = this.getMonth() + (months || 1); 
 
    this.setMonth(m); 
 
    if(this.getMonth() !== (m % 11)) //11: month is 0 based 
 
    \t this.setDate(0); 
 
} 
 

 

 
var nextDate = new Date("2016 01 31"); 
 
nextDate.addMonths(1); 
 
document.writeln(nextDate);

months || 1僅意味着如果沒有月被提交給具有缺省值。在年轉換的情況下需要m % 11。 11而不是12,因爲javascripts月(因此getMonth)是0基於。