js根据一年中的周(一年中的第几周),来获取周的日期范围(根据一年的第N周,来获取第N周的日期范围)

Date.prototype.Format = function(fmt){ //需要JS格式化时间,后期做的时候方便使用   
  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;   
};

//通过周取日期范围   year 年   weeks 周
function weekGetDate(year,weeks){
    var date = new Date(year,"0","1"); 
    // 获取当前星期几,0:星期一 
    var time = date.getTime(); 
     //当这一年的1月1日为周日时则本年有54周,否则没有54周,没有则去除第54周的提示       
    var _week = date.getDay();   
 
    if(_week!=0){//一年53周情况 
        if(weeks==54){    
            return '今年没有54周';    
        }    
        var cnt=0;// 获取距离周末的天数    
        if(_week==0){    
            cnt = 7;    
        }else if(_week==1){    
            cnt = 6;    
        }else if(_week==2){    
            cnt = 5;    
        }else if(_week==3){    
            cnt = 4;    
        }else if(_week==4){    
            cnt = 3;    
        }else if(_week==5){    
            cnt = 2;    
        }else if(_week==6){    
            cnt = 1;    
        }    
        cnt += 1;//加1表示以星期一为一周的第一天    // 将这个长整形时间加上第N周的时间偏移    
        time += cnt*24*3600000; //第2周开始时间 
        var nextYear = new Date(parseInt(year,10)+1,"0","1");    
        var nextWeek = nextYear.getDay();    
        var lastcnt = 0;//获取最后一周开始时间到周末的天数    
        if(nextWeek==0){    
            lastcnt = 6;    
        }else if(nextWeek==1){    
            lastcnt = 0;    
        }else if(nextWeek==2){    
            lastcnt = 1;    
        }else if(nextWeek==3){ 
            lastcnt = 2;    
        }else if(nextWeek==4){    
            lastcnt = 3;    
        }else if(nextWeek==5){    
            lastcnt = 4;    
        }else if(nextWeek==6){    
            lastcnt = 5;    
        }    
        if(weeks==1){//第1周特殊处理    // 为日期对象 date 重新设置成时间 time
            var start = date.Format("yyyy-MM-dd");
            date.setTime(time-24*3600000);

            return start + "-----" + date;
        }else if(weeks==53){//第53周特殊处理  
            //第53周开始时间      
            var start = time+(weeks-2)*7*24*3600000; 
            //第53周结束时间
            var end = time+(weeks-2)*7*24*3600000 + lastcnt*24*3600000 - 24*3600000;
            date.setTime(start);    
            var _start = date.Format("yyyy-MM-dd"); 
            date.setTime(end);    
            var _end = date.Format("yyyy-MM-dd"); 
           return _start + "---"  + _end;
        }else{    
            var start = time+(weeks-2)*7*24*3600000; //第n周开始时间    
            var end = time+(weeks-1)*7*24*3600000 - 24*3600000; //第n周结束时间
            date.setTime(start);    
            var _start = date.Format("yyyy-MM-dd");     
            date.setTime(end);    
            var _end = date.Format("yyyy-MM-dd");
            return _start + "---"  + _end;
        } 
    }else{//一年54周情况    
        var cnt=0;// 获取距离周末的天数    
        if(_week==0 && weeks==1){//第一周    
            cnt = 0;    
        }else if(_week==0){    
            cnt = 7;    
        }else if(_week==1){    
            cnt = 6;    
        }else if(_week==2){    
            cnt = 5;    
        }else if(_week==3){    
            cnt = 4;    
        }else if(_week==4){    
            cnt = 3;    
        }else if(_week==5){    
            cnt = 2;    
        }else if(_week==6){    
            cnt = 1;    
        }    
        cnt += 1;//加1表示以星期一为一周的第一天    
        // 将这个长整形时间加上第N周的时间偏移    
        time += 24*3600000; //第2周开始时间    
        var nextYear = new Date(parseInt(year,10)+1,"0","1");    
        var nextWeek = nextYear.getDay();    
        var lastcnt = 0;//获取最后一周开始时间到周末的天数    
        if(nextWeek==0){    
            lastcnt = 6;    
        }else if(nextWeek==1){    
            lastcnt = 0;    
        }else if(nextWeek==2){ 
            lastcnt = 1;    
        }else if(nextWeek==3){    
            lastcnt = 2;    
        }else if(nextWeek==4){    
            lastcnt = 3;    
        }else if(nextWeek==5){    
            lastcnt = 4;    
        }else if(nextWeek==6){    
            lastcnt = 5;    
        }    
        if(weeks==1){//第1周特殊处理
            var start = date.Format("yyyy-MM-dd"); 
            date.setTime(time-24*3600000);
            alert(start +'--'+ date);
            /return _start + "---"  + date;
        }else if(weeks==54){//第54周特殊处理   
            //第54周开始时间    
            var start = time+(weeks-2)*7*24*3600000; 
            //第53周结束时间 
            var end = time+(weeks-2)*7*24*3600000 + lastcnt*24*3600000 - 24*3600000; 
            date.setTime(start);    
            var _start = date.Format("yyyy-MM-dd"); 
            date.setTime(end);    
            var _end = date.Format("yyyy-MM-dd");
            return _start + "---"  + _end;
        }else{    
            var start = time+(weeks-2)*7*24*3600000; //第n周开始时间    
            var end = time+(weeks-1)*7*24*3600000 - 24*3600000; //第n周结束时间
            date.setTime(start);    
            var _start = date.Format("yyyy-MM-dd"); 
            date.setTime(end);    
            var _end = date.Format("yyyy-MM-dd");
            return _start + "---"  + _end;
        }    
    }    
}
//两个参数分别为         年份 第12周
console.log(weekGetDate(2019,12))//2019-03-18---2019-03-24
 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值