天天看点

JS日期操作扩展(格式化日期,日期加减天数,获取当前日期所在周,求当月最后一天)

前言

关于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);//下个月第一天减去一天,就是当月最后一天
}           

 暂时先写这么多,如果有其他用到的再加上吧~