timeinterval.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. var monthday=[31,28,31,30,31,30,31,31,30,31,30,31];
  2. var weekarea=new Array(7);
  3. var nowdate=new Date();
  4. var weekName=['日','六','五','四','三','二','一'];
  5. var timeinterval={
  6. //闰年判断
  7. getRunnian(yy){
  8. if(yy % 4 == 0 && yy % 100 !== 0 || yy % 400 == 0){
  9. monthday[1]=29;
  10. }else{
  11. monthday[1]=28;
  12. }
  13. },
  14. /*
  15. 几种情况:
  16. 1.当月第一天是星期一
  17. 2.当月最后一天是星期日
  18. 3.同时满足 1,2 必是平年28天 4行
  19. */
  20. //获取月份区间
  21. getMonthArea(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1,dd=nowdate.getDate()){
  22. this.getRunnian(yy);
  23. mm--;
  24. var showday=monthday[mm];
  25. var d1=new Date(yy,mm,1);
  26. var firstday=d1.getDay();
  27. var d2=new Date(yy,mm,monthday[mm]);
  28. var lastday=d2.getDay();
  29. if(lastday==0)
  30. lastday=7;
  31. if(firstday==0){
  32. firstday=7;
  33. }
  34. if(firstday!=1){
  35. showday+=firstday-1;
  36. }
  37. if(lastday!=7){
  38. showday+=7-lastday;
  39. }
  40. var hangshu=showday/7;
  41. var montharea=new Array(7*hangshu);
  42. for(var i=0;i<7*hangshu;i++){
  43. var sm=mm,sd=dd,sy=yy;
  44. //上个月尾部几天
  45. if(firstday-1>i){
  46. sm--;
  47. if(sm<0){
  48. sm=11;
  49. sy--;
  50. }
  51. sd=monthday[sm]-(firstday-2-i);
  52. }
  53. if(i>=firstday-1&&i<monthday[sm]+firstday-1){
  54. sd=i-(firstday-2);
  55. }
  56. if(i>=monthday[sm]+firstday-1){
  57. sd=i-(monthday[sm]+firstday-1)+1;
  58. sm++;
  59. if(sm>11){
  60. sm=0;
  61. sy++;
  62. }
  63. }
  64. 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)}
  65. }
  66. return montharea;
  67. },
  68. //获取周区间
  69. getWeekArea(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1,dd=nowdate.getDate(),xx=nowdate.getDay()){
  70. this.getRunnian(yy);
  71. if(xx==0){
  72. xx=7
  73. }
  74. var endday=dd+7-xx;
  75. for(var i=0; i<7;i++){
  76. var sy=yy,sm=mm,sd=endday-i;
  77. //上一个月
  78. if(sd<=0){
  79. sm--;
  80. }
  81. //下一个月
  82. else if(sd>monthday[mm-1]){
  83. sm++;
  84. }
  85. if(sm==0){
  86. sm=12;
  87. sy--;
  88. }
  89. if(sm>12){
  90. sm=1;
  91. sy++;
  92. }
  93. if(sd<=0){
  94. sd=monthday[sm-1]+sd;
  95. }
  96. else if(sd>monthday[mm-1]){
  97. sd=sd-monthday[mm-1];
  98. }
  99. weekarea[6-i]={yy:sy,mm:sm,dd:sd,date:sy+'-'+(sm<10?('0'+sm):sm)+'-'+(sd<10?('0'+sd):sd),xingqi:weekName[i]}
  100. }
  101. return weekarea;
  102. },
  103. //获取日期区间
  104. getDayArea(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1,dd=nowdate.getDate(),xx=nowdate.getDay()){
  105. return {yy,mm,dd,xx,date:yy+'-'+(mm<10?('0'+mm):mm)+'-'+(dd<10?('0'+dd):dd)};
  106. },
  107. //获取当前月份天数
  108. getMonthDayNum(yy=nowdate.getFullYear(),mm=nowdate.getMonth()+1){
  109. this.getRunnian(yy);
  110. return monthday[mm-1];
  111. },
  112. //上一周
  113. beforeWeek(data){
  114. let {yy,mm,dd}=this.before(data);
  115. var d=new Date(yy,mm-1,dd);
  116. return this.getWeekArea(yy,mm,dd,d.getDay());
  117. },
  118. //下一周
  119. afterWeek(data){
  120. let {yy,mm,dd}=this.after(data);
  121. var d=new Date(yy,mm-1,dd);
  122. return this.getWeekArea(yy,mm,dd,d.getDay());
  123. },
  124. //上一月
  125. beforeMouth(data){
  126. let {yy,mm,dd}=data;
  127. if(dd==1){
  128. mm--;
  129. if(mm==0){
  130. mm=12;
  131. yy--;
  132. }
  133. }
  134. var d=new Date(yy,mm-1,dd);
  135. return this.getMonthArea(yy,mm,dd);
  136. },
  137. //下一月
  138. afterMouth(data){
  139. let {yy,mm,dd}=data;
  140. this.getRunnian(yy);
  141. if(dd==monthday[mm-1]){
  142. dd=1;
  143. mm++;
  144. if(mm==13){
  145. mm=1;
  146. yy++;
  147. }
  148. }
  149. var d=new Date(yy,mm-1,dd);
  150. return this.getMonthArea(yy,mm,dd);
  151. },
  152. //前一天
  153. beforeDay(data){
  154. let {yy,mm,dd}=this.before(data);
  155. var d=new Date(yy,mm-1,dd);
  156. return this.getDayArea(yy,mm,dd,d.getDay());
  157. },
  158. //后一天
  159. afterDay(data){
  160. let {yy,mm,dd}=this.after(data);
  161. var d=new Date(yy,mm-1,dd);
  162. return this.getDayArea(yy,mm,dd,d.getDay());
  163. },
  164. //前
  165. before(data){
  166. let {yy,mm,dd}=data;
  167. dd--;
  168. if(dd==0){
  169. mm--;
  170. if(mm==0){
  171. mm=12;
  172. yy--;
  173. }
  174. this.getRunnian(yy);
  175. dd=monthday[mm-1];
  176. }
  177. return {yy,mm,dd};
  178. },
  179. //后
  180. after(data){
  181. let {yy,mm,dd}=data;
  182. dd++;
  183. if(dd>monthday[mm-1]){
  184. dd=1;
  185. mm++;
  186. if(mm==13){
  187. mm=1;
  188. yy++;
  189. }
  190. }
  191. return {yy,mm,dd};
  192. }
  193. };
  194. export default timeinterval;