前言
关于JS日期的操作很多,根据不同的需求,可能需要的功能没被封装,可以利用Date的prototype扩展下方便使用~
正文
1.格式化日期
1)扩展代码
Date.prototype.format = function(fmt) {
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt)) {
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
for(var k in o) {
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}
2)使用示范
var date=new Date();//当前日期
console.log(date.format("yyyy-MM-dd"));//格式化
3)注
求当前日期所在季度的方法:((所在月+2)/3)下取整;所在月用getMonth(0~11)还要加1。
2.日期加减天数
1)扩展代码
Date.prototype.addDays=function(days){
return new Date(this.getTime() + days*60*60*24*1000);
//或者 return d.setDate(d.getDate()+days);
}
2)使用示范
var date=new Date();
date=date.addDays(-3);//计算三天前日期
console.log(date.format("yyyy-MM-dd"));//格式化
3.日期加减月数
1)扩展代码
Date.prototype.plusMonths = function(num) {
var newDate = new Date(this);
newDate.setMonth(this.getMonth() + num); //setMonth()会自动除以12
//注意:此时,月数可能会自动进位,比如:1-31加上num=1的情况,会变成3-3(非闰年)或3-2(闰年),即2-31自动转换为下个月的某一天。
var currentMonth = this.getMonth() + this.getFullYear() * 12; //获得月的绝对值
var diff = (newDate.getMonth() + newDate.getFullYear() * 12) - currentMonth; //计算新旧两个月绝对值的差
if (diff != num) { //如果月绝对值的差和加上的月数不一样,说明月进位了,此时需要退一个月
//setDate(0)表示变成上个月的最后一天
newDate.setDate(0);
}
return newDate;
};
2)注:此方法来自Clement-Xu的csdn博客: https://blog.csdn.net/ClementAD/article/details/52634932
4.获取当前日期所在星期几
1)扩展代码
Date.prototype.getWeek=function(){
var weekNum=this.getDay();//当前日期的星期数,1~6为周一~周五,0为周日
if(weekNum==0)//周日特殊处理
weekNum=7;
return weekNum;
}
2)示例:
var date=new Date();
console.log(date.getWeek());//输出当前日期所在星期数,如1即星期一,7即星期日
5.获取当前日期所在周区间(星期一,星期日的日期)
1)扩展代码
①获取当前日期所在周星期一日期
Date.prototype.getWeeksFirstDay=function(){
var that=this;
var weekNum=this.getDay();//当前日期的星期数,1~6为周一~周五,0为周日
if(weekNum==0)//周日特殊处理
weekNum=7;
that.setDate(this.getDate()+(1-weekNum));
return that;
}
② 获取当前日期所在周星期天日期
Date.prototype.getWeeksLastDay=function(){
var that=this;
var weekNum=this.getDay();//当前日期的星期数,1~6为周一~周五,0为周日
if(weekNum==0)//周日特殊处理
weekNum=7;
that.setDate(this.getDate()+(7-weekNum));
return that;
}
6.获取当前日期所在月区间(月初,月末)
①获取当前日期所在月第一天
Date.prototype.getMonthFirstDay=function(){
return new Date(this.getFullYear(),this.getMonth(),1);//注意不同的Date构造函数
}
②获取当前日期所在月最后一天(可能是30号,也可能是31号)
Date.prototype.getMonthLastDay=function(){
var nextMonthFirstDay=new Date(this.getFullYear(),this.getMonth()+1,1);
return new Date(nextMonthFirstDay-1000*60*60*24);//下个月第一天减去一天,就是当月最后一天
}
暂时先写这么多,如果有其他用到的再加上吧~