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);

 

posted @ 2020-05-23 11:53  kangyouwei  阅读(1850)  评论(0编辑  收藏  举报