已知某年某月某日是星期几,输入一个年月日(1980~2030),求得该日为星期几。并判断输入的日期是否合法(无32号及平闰年2月天数等)
以下是星期计算公式
(年+年/4+年/400-年/100-年基数+月基数+日)/7=……余星期几
注:式中分数均取整
年基数,平年1,闰年2,
月基数,1、平年:一月0, 二月3, 三月3, 四月6, 五月1, 六月4,
七月0, 八月3, 九月5, 十月0, 十一月3, 十二月5.
2、闰年:一月0, 二月3, 三月4, 四月0, 五月2, 六月5,
七月0, 八月3, 九月6, 十月1, 十一月4, 十二月6.
如:1949年10月1日是星期几?
(1949+1949/4+1949/400-1949/100-1+0+1)/7
=(1949+487+4-19-1+0+1)/7
=345……6
即该日为星期六。
代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
input {
width: 100px;
}
#btn {
width: 150px;
}
</style>
</head>
<body>
<input type="text" id="txt1">
<input type="text" id="txtm">
<input type="text" id="txt2">
<input type="button" id="btn" value="这一天是星期几?">
<input type="text" id="txt3">
</body>
</html>
<script>
var otxt1 = document.getElementById("txt1");
var osel = document.getElementById("txtm");
var otxt2 = document.getElementById("txt2");
var obtn = document.getElementById("btn");
var otxt3 = document.getElementById("txt3");
obtn.onclick = function () {
justify(Number(otxt1.value), Number(osel.value), Number(otxt2.value));
otxt3.value = week(Number(otxt1.value), Number(osel.value), Number(otxt2.value));
}
var njs = 0;
var yjs = 0;
function week(n, y, r) {
if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0) {//闰年
njs = 2;
switch (y) {
case 1:
case 4:
case 7:
yjs = 0; break;
case 2:
case 8:
yjs = 3; break;
case 5:
yjs = 2; break;
case 6:
yjs = 5; break;
case 9:
yjs = 6; break;
case 10:
yjs = 1; break;
case 11:
case 3:
yjs = 4; break;
case 12:
yjs = 6; break;
default:
yjs = 999; break;
}
} else {
njs = 1;
switch (y) {
case 1:
case 7:
case 10:
yjs = 0; break;
case 2:
case 3:
case 8:
case 11:
yjs = 3; break;
case 9:
case 12:
yjs = 5; break;
case 4:
yjs = 6; break;
case 5:
yjs = 1; break;
case 6:
yjs = 4; break;
}
}
var w = (n + parseInt(n / 4) + parseInt(n / 400) - parseInt(n / 100) - njs + yjs + r) % 7;
switch (w) {
case 0:
return "星期天";
case 1:
return "星期一";
case 2:
return "星期二";
case 3:
return "星期三";
case 4:
return "星期四";
case 5:
return "星期五";
case 6:
return "星期六";
}
}
function justify(n, y, r) {
if (n < 1980 || n > 2020) {
alert("请输入1980-2020年的年份");
return false;
}
if (y < 1 || y > 12) {
alert("请输入1-12之间的月份");
return false;
}
if (n % 4 == 0 && n % 100 != 0 || n % 400 == 0) {
if (y == 2) {
if (r > 29) {
alert("该年是闰年,2月总共29天");
return false;
}
}
} else {
if (y == 2) {
if (r > 28) {
alert("该年是平年,2月总共28天");
return false;
}
}
}
switch (y) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if (r < 0 || r > 31) {
alert("超出日期范围");
return false;
}
break;
case 4:
case 6:
case 9:
case 11:
if (r < 0 || r > 30) {
alert("超出日期范围");
return false;
}
break;
case 2:
if (r < 0 || r > 29) {
alert("超出日期范围");
return false;
}
}
return true;
}
</script>