JavaScript通过日期计算星期几
通过输入的日期(如2020年5月20日,要输入成:20200520),计算是星期几,主要还是算法问题,算法不是我们该伤脑的事,百度扒拉过来,计算过程如下:
只需要知道三个代码
日期代码+月份代码+年份代码
就可以秒算任意年份任意日期的星期数
方法
1、日期代码指的是日期数,如3月18号,日期代码为18。4月7号,日期代码为7。
2、月份代码(需要小小记忆)
五月 是 0
八月 是 1
二月 三月 十一月 是 2
六月 是 3
九月 十二月 是4
四月 七月 是5
一月 十月 是 6
如果遇到闰年 则二月代码变为1,一月代码变为5,其它不变。即,非闰年的月份代码为622503 514624,闰年的月份代码为512503 514624。
3、年份代码
举个例子 2010年的代码,我们用尾数10除以4(忽略余数)再加上10得到数字12,再用12除以7,得到的余数5就是2010年的代码。
也就是说,心算出2000到2099任意年份的代码,只需将其后两位数X除以4(忽略余数),然后与X相加,并除以7就可以了,得到的余数就是其年份代码。10年的年份代码是5,11年年份代码为6。
4、秒算任意日期的星期数
如,我们算一下2010年4月25日
日期代码25
月份代码5
年份代码5
日期代码+月份代码+年份代码=25+5+5=35
35是7的倍数,所以2010年4月25日是星期日
再比如算一下2010年10月1日
日期代码1
月份代码6
年份代码5
日期代码+月份代码+年份代码=1+6+5=12
12除以7余5,所以2010年10月1日是星期五
如果得到的代码和是小于7的数,那么此数直接是星期数
如果得到的代码和是大于7的数,那么将7a686964616fe59b9ee7ad9431333337613830该数除以7得到的余数为星期数。
下面,封装函数实现此功能,代码如下:
作者:kangyouwei
链接:https://juejin.im/post/5ec8949ff265da77057e2483
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 //判断闰年 2 function LeapYear(year){ 3 if(year%4==0&&year%100!=0||year%400==0){ 4 return true; 5 }else{ 6 return false; 7 } 8 9 } 10 //计算累积天数(年积日) 11 function SumDays(year,month,day){ 12 var flag = LeapYear(year); 13 var sumdays = 0; 14 switch(month-1){ 15 case 11:sumdays+=30; 16 case 10:sumdays+=31; 17 case 9:sumdays+=30; 18 case 8:sumdays+=31; 19 case 7:sumdays+=31; 20 case 6:sumdays+=30; 21 case 5:sumdays+=31; 22 case 4:sumdays+=30; 23 case 3:sumdays+=31; 24 case 2:flag==true? sumdays +=29:sumdays +=28; 25 case 1:sumdays+=31; 26 case 0:sumdays+=day; 27 } 28 return sumdays; 29 } 30 // 31 function Week(date){ 32 var day = date%100; 33 var month = parseInt(date/100)%100; 34 var year = parseInt(date/10000); 35 var dayNum = day;//日份代码 36 var monthNum = 0;//月份代码 37 var yearNum = 0;//年份代码 38 var week = 0; 39 var arr = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'] 40 41 //计算月份代码 42 if(month ==5){ 43 monthNum = 0; 44 }else if(month == 8){ 45 monthNum = 1; 46 }else if(month == 2||month == 3||month == 11){ 47 monthNum = 2; 48 }else if(month == 6){ 49 monthNum = 3; 50 }else if(month == 9||month == 12){ 51 monthNum = 4; 52 }else if(month == 4||month == 7){ 53 monthNum = 5; 54 }else if(month == 1||month == 10){ 55 monthNum = 6; 56 } 57 //计算年份代码 58 yearNum = (parseInt((year%100)/4)+year%100)%7 59 60 //根据代码计算星期几 61 week = (dayNum + monthNum +yearNum)%7; 62 63 64 console.log(year,month,day); 65 console.log(dayNum,monthNum,yearNum,week); 66 67 console.log(arr[week]); 68 69 } 70 71 Week(20200521);