js 在日期不滿足的情況下就會自動加1個月,比如在當前時間為3月31號,傳入1,1兩個參數,預期結果為2月29日,但是結果輸出了3月2日。就是如果不滿就會溢出到下個月,后來看了api發現了setMonth有兩個方法,另外一個是指定月份,指定某一天,就可以解決這個問題
我們先看看按天數去計算的代碼,很簡單
var d = new Date();d.setMonth(d.getMonth() +1);alert(d.toLocaleString());
但是我們要求的是自然月,所以需要判斷 是否2月 且是否是閏年 ,我們還需要另外一個方法去格式化時間 ,代碼如下
//求自然月日期function getMonthBeforeFormatAndDay(num, format, day) {var date = new Date();date.setMonth(date.getMonth() + (num*1), 1);//讀取日期自動會減一,所以要加一var mo = date.getMonth() + 1;//小月if (mo == 4 || mo == 6 || mo == 9 || mo == 11) {if (day > 30) {day = 30}}//2月else if (mo == 2) {if (isLeapYear(date.getFullYear())) {if (day > 29) {day = 29} else {day = 28}}if (day > 28) {day = 28}}//大月else {if (day > 31) {day = 31}}retureValue = date.format('yyyy' + format + 'MM' + format + day);return retureValue;}//JS判斷閏年代碼function isLeapYear(Year) {if (((Year % 4) == 0) && ((Year % 100) != 0) || ((Year % 400) == 0)) {return (true);} else { return (false); }}//日期格式化Date.prototype.format = function (format) {var o = {"M+": this.getMonth() + 1, // month"d+": this.getDate(), // day"h+": this.getHours(), // hour"m+": this.getMinutes(), // minute"s+": this.getSeconds(), // second"q+": Math.floor((this.getMonth() + 3) / 3), // quarter"S": this.getMilliseconds()// millisecond }if (/(y+)/.test(format))format = format.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(format))format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));return format;}
這樣就大功告成啦,網上好像沒有這方面的代碼,希望能幫到需要求自然月的同學
?