我有這樣的代碼:爲什麼這個datetime函數setMonth的結果是錯誤的?得到月()+ 1
var nextDate = new Date("2016 01 31");
nextDate.setMonth(nextDate.getMonth() + 1);
我期待的結果是Feb 28 2016
,但它表明Mar 02 2016
代替。
爲什麼?有沒有解決方案?
我有這樣的代碼:爲什麼這個datetime函數setMonth的結果是錯誤的?得到月()+ 1
var nextDate = new Date("2016 01 31");
nextDate.setMonth(nextDate.getMonth() + 1);
我期待的結果是Feb 28 2016
,但它表明Mar 02 2016
代替。
爲什麼?有沒有解決方案?
這是因爲2月份有29天,並且當你從1月份開始,有31天的新月份到2月份,那麼這兩天的差額將轉移到另一月份。 簡單的方法就是創建新的Date實例。
您可能需要執行一些邏輯,以獲得相應的日期權
有隻有29天月,因此,2月31日日將轉化爲火星2
您需要更新天你的日期對象到那個月的最後一天。
function daysInMonth(month,year) {
return new Date(year, month, 0).getDate();
}
與助手功能可能的解決辦法:您可以通過指定設置日期爲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基於。
看看這個問題:http://stackoverflow.com/questions/21490366/setmonth1-gives-me-march和一些解釋在這裏:http://stackoverflow.com/a/14680430/5119765 –
在Safari ,'new Date(「2016 01 31」)'返回一個無效日期,所以你的第一個問題是正確解析字符串。 – RobG