| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- 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-(firstday-2);
- }
- if(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;
|