js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天
来源:互联网 发布:http 411 nginx 编辑:程序博客网 时间:2024/05/16 12:25
最近被日期弄得很头疼,由于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.求自然月
我在网上查询到查询三个月前的方法,参照点击打开链接http://wawa129.iteye.com/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的请多多指教,也希望大家如果有好的处理日期的代码也能共享!谢谢大家!
1 0
- js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天
- js获取月的最后一天日期
- js获取月的最后一天日期 .
- php获取自然周自然月,周几,月,周第一天,最后一天总结
- 获得某个日期当月的最后一天和某一日
- java 获取当前日期前一天 当前月第一天和最后一天
- java获取指定日期前一天和后一天的日期
- 计算指定日期的前一天、后一天
- js实现获取上一个月的一天,和最后一天
- 计算特定日期的前一天和后一天,根据输入的月,日获取该月日属于什么季节
- 根据日期获取当月第一天和当月最后一天
- MySql取得日期(前一天、某一天)(前一月第一天到最后一天)
- 取每个月最后一天的日期
- 求每个月的最后一天日期
- JS 获取当天所在月的最后一天日期,所在周的每天的日期,时间的计算
- linux 常用日期 查询前一天 当月1号 上个月第一条和最后一天 上个月
- 计算日期前一天,后一天
- ABAP:计算某一天的当月的最后一天
- ListView的异步加载图片问题与优化
- Spring的jar包描述
- JAVA中String的常用方法?
- lightoj 1011 - Marriage Ceremonies(状态压缩dp)
- JS判断元素类型
- js日期处理---计算自然月、指定自然月某一天、获取前一天和后一天、判断闰年、当月最后一天日期、月末最后一天
- 使用Struts实现防止表单重复提交
- 输出数中最小的一个数在最后!!!
- Windows Dev Intro - VS2013 Compile X64 Project Upgraded from Win32 Project
- 静态变量static学习
- (源码分析)Android-Universal-Image-Loader (图片异步加载缓存库)的使用配置
- iOS开发,将子线程获取的数据实时更新到UI
- json和xml比较与区别
- POJ 1470Closest Common Ancestors