1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > js日期处理---计算自然月 指定自然月某一天 获取前一天和后一天 判断闰年 当月最

js日期处理---计算自然月 指定自然月某一天 获取前一天和后一天 判断闰年 当月最

时间:2023-04-20 18:56:33

相关推荐

js日期处理---计算自然月 指定自然月某一天 获取前一天和后一天 判断闰年 当月最

最近被日期弄得很头疼,由于js的月份是比较特殊的[0-11],所以在月份计算上诸多不易。特地整理了日期一些方法。

首先,以下代码均有一个共同的日期格式化函数

//日期格式化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;}

但是出现了一个很烦人的事情,就是js 在日期不满足的情况下就会自动加1个月,比如在当前时间为3月31号,传入1,1两个参数,预期结果为2月29日,但是结果输出了3月2日。就是如果不满就会溢出到下个月,后来看了api发现了setMonth有两个方法,另外一个是指定月份,指定某一天,就可以解决这个问题,并延伸了两个方法。

1.求自然月

我在网上查询到查询三个月前的方法,参照点击打开链接/blog/1766263,进行改造,js代码如下。

//求自然月日期function getMonthBefore(timeType, num) {var date = new Date();var retureValue = "";if (timeType == 1) {date.setMonth(date.getMonth() - (num - 1));//format为日期格式化函数,在下方展示retureValue = date.format('yyyy-MM');}if (timeType == 0) {date.setMonth(date.getMonth() - (num - 1));retureValue = date.format('yyyy-MM-01');}return retureValue;}

//求自然月日期function getMonthBefore(timeType, num) {var date = new Date();var retureValue = "";//如果输入1至输出到月if (timeType == 1) {date.setMonth(date.getMonth() - (num ),1);retureValue = date.format('yyyy-MM');}if (timeType == 0) {date.setMonth(date.getMonth() - (num ),1);retureValue = date.format('yyyy-MM-01');}// alert(retureValue);return retureValue;}//求自然月日期,添加日期格式化符号function getMonthBeforeFormat(timeType, num,format) {var date = new Date();var retureValue = "";if (timeType == 1) {date.setMonth(date.getMonth() - (num ),1);retureValue = date.format('yyyy'+format+'MM');}if (timeType == 0) {date.setMonth(date.getMonth() - (num ),1);retureValue = date.format('yyyy'+format+'MM'+format+'01');}return retureValue;}//求自然月日期,添加日期格式化符号,指定某一天function getMonthBeforeFormatAndDay(timeType, num,format,day) {var date = new Date();var retureValue = "";if (timeType == 1) {date.setMonth(date.getMonth() - (num ),1);retureValue = date.format('yyyy'+format+'MM');}if (timeType == 0) {date.setMonth(date.getMonth() - (num ),1);//读取日期自动会减一,所以要加一var mo=date.getMonth()+1;//判断如果傻叉的非得传某一天大于月份最大日期就自动赋值最后一天if(mo==4||mo==6||mo==9||mo==11){if(day>30){day=30}}else if(mo==2){if( isLeapYear(date.getFullYear())){if(day>29){day=29}else{day=28}}}else{if(day>31){day=31}}retureValue = date.format('yyyy'+format+'MM'+format+day);}return retureValue;}

2.获取月末

有两种方法

//获取当月最后一天日期 function getLastDay(year,month) { var new_year = year; //取当前的年份var new_month = month++;//取下一个月的第一天,方便计算(最后一天不固定)if(month>12) { new_month -=12; //月份减new_year++; //年份增} var new_date = new Date(new_year,new_month,1);//取当年当月中的第一天return (new Date(new_date.getTime()-1000*60*60*24)).getDate();//获取当月最后一天日期} /**求月末 yyyy-mm-dd* * @param _month* @returns*/function getMonthEndDay(_month) {var date = new Date();var day=01;var year1 = _month.substr(0,4);var month1 = _month.substr(5,2);date.setYear(year1);date.setMonth(month1-1);//读取日期自动回减一var mo=date.getMonth()+1;if(mo==4||mo==6||mo==9||mo==11){day=30}else if(mo==2){if( isLeapYear(date.getFullYear())){day=29}else{day=28}}else{day=31}date.setDate(parseInt(day));return date.format('yyyy-MM-dd');}

3.获取前后天数

function GetDateStr(AddDayCount) {var dd = new Date();dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期var y = dd.getFullYear();var m = dd.getMonth()+1;//获取当前月份的日期var d = dd.getDate();return dd.format('yyyy-MM-dd');}

4.获取当前日期YYYY MM DD

//获取当前日期YYYY MM DDfunction getNowDate(format) {var now = new Date()y = now.getFullYear()m = now.getMonth() + 1d = now.getDate()m = m < 10 ? "0" + m : md = d < 10 ? "0" + d : dreturn y + format + m + format + d}

5.判断是否为闰年

//JS判断闰年代码function isLeapYear (Year) {if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) {return (true);} else { return (false); }}

代码均做了基本的测试,刚开始写博客,如果出现bug的请多多指教,也希望大家如果有好的处理日期的代码也能共享!谢谢大家!

js日期处理---计算自然月 指定自然月某一天 获取前一天和后一天 判断闰年 当月最后一天日期 月末最后一天

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。