var monthday=[31,28,31,30,31,30,31,31,30,31,30,31]; var weekarea=new Array(7); var nowdate=new Date(); var weekName=['日','六','五','四','三','二','一']; var timeinterval={ //闰年判断 getRunnian(yy){ if(yy % 4 == 0 && yy % 100 !== 0 || yy % 400 == 0){ monthday[1]=29; }else{ monthday[1]=28; } }, /* 几种情况: 1.当月第一天是星期一 2.当月最后一天是星期日 3.同时满足 1,2 必是平年28天 4行 */ //获取月份区间 getMonthArea(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1,dd=nowdate.getDate()){ this.getRunnian(yy); mm--; var showday=monthday[mm]; var d1=new Date(yy,mm,1); var firstday=d1.getDay(); var d2=new Date(yy,mm,monthday[mm]); var lastday=d2.getDay(); if(lastday==0) lastday=7; if(firstday==0){ firstday=7; } if(firstday!=1){ showday+=firstday-1; } if(lastday!=7){ showday+=7-lastday; } var hangshu=showday/7; var montharea=new Array(7*hangshu); for(var i=0;i<7*hangshu;i++){ var sm=mm,sd=dd,sy=yy; //上个月尾部几天 if(firstday-1>i){ sm--; if(sm<0){ sm=11; sy--; } sd=monthday[sm]-(firstday-2-i); } if(i>=firstday-1&&i=monthday[sm]+firstday-1){ sd=i-(monthday[sm]+firstday-1)+1; sm++; if(sm>11){ sm=0; sy++; } } montharea[i]={yy:sy,mm:sm+1,dd:sd,xx:new Date(sy+'-'+((sm+1)<10?('0'+(sm+1)):(sm+1))+'-'+(sd<10?('0'+sd):sd)).getDay(),date:sy+'-'+((sm+1)<10?('0'+(sm+1)):(sm+1))+'-'+(sd<10?('0'+sd):sd)} } return montharea; }, //获取周区间 getWeekArea(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1,dd=nowdate.getDate(),xx=nowdate.getDay()){ this.getRunnian(yy); if(xx==0){ xx=7 } var endday=dd+7-xx; for(var i=0; i<7;i++){ var sy=yy,sm=mm,sd=endday-i; //上一个月 if(sd<=0){ sm--; } //下一个月 else if(sd>monthday[mm-1]){ sm++; } if(sm==0){ sm=12; sy--; } if(sm>12){ sm=1; sy++; } if(sd<=0){ sd=monthday[sm-1]+sd; } else if(sd>monthday[mm-1]){ sd=sd-monthday[mm-1]; } weekarea[6-i]={yy:sy,mm:sm,dd:sd,date:sy+'-'+(sm<10?('0'+sm):sm)+'-'+(sd<10?('0'+sd):sd),xingqi:weekName[i]} } return weekarea; }, //获取日期区间 getDayArea(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1,dd=nowdate.getDate(),xx=nowdate.getDay()){ return {yy,mm,dd,xx,date:yy+'-'+(mm<10?('0'+mm):mm)+'-'+(dd<10?('0'+dd):dd)}; }, //获取当前月份天数 getMonthDayNum(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1){ this.getRunnian(yy); return monthday[mm-1]; }, //上一周 beforeWeek(data){ let {yy,mm,dd}=this.before(data); var d=new Date(yy,mm-1,dd); return this.getWeekArea(yy,mm,dd,d.getDay()); }, //下一周 afterWeek(data){ let {yy,mm,dd}=this.after(data); var d=new Date(yy,mm-1,dd); return this.getWeekArea(yy,mm,dd,d.getDay()); }, //上一月 beforeMouth(data){ let {yy,mm,dd}=data; if(dd==1){ mm--; if(mm==0){ mm=12; yy--; } } var d=new Date(yy,mm-1,dd); return this.getMonthArea(yy,mm,dd); }, //下一月 afterMouth(data){ let {yy,mm,dd}=data; this.getRunnian(yy); if(dd==monthday[mm-1]){ dd=1; mm++; if(mm==13){ mm=1; yy++; } } var d=new Date(yy,mm-1,dd); return this.getMonthArea(yy,mm,dd); }, //前一天 beforeDay(data){ let {yy,mm,dd}=this.before(data); var d=new Date(yy,mm-1,dd); return this.getDayArea(yy,mm,dd,d.getDay()); }, //后一天 afterDay(data){ let {yy,mm,dd}=this.after(data); var d=new Date(yy,mm-1,dd); return this.getDayArea(yy,mm,dd,d.getDay()); }, //前 before(data){ let {yy,mm,dd}=data; dd--; if(dd==0){ mm--; if(mm==0){ mm=12; yy--; } this.getRunnian(yy); dd=monthday[mm-1]; } return {yy,mm,dd}; }, //后 after(data){ let {yy,mm,dd}=data; dd++; if(dd>monthday[mm-1]){ dd=1; mm++; if(mm==13){ mm=1; yy++; } } return {yy,mm,dd}; } }; export default timeinterval;