计算星期可用 蔡勒(Zeller)公式(只适合于1582年10月15日之后的情形):
W = Y + [Y/4] + [C/4] - 2C + [13(M+1)/5] + D - 1
公式中的符号含义如下: C:世纪数减一(年的高两位数); Y:年(年的低两位数); M:月(M大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的 13、14月来计算,比如2005年1月1日要看作2004年的13月1日来计算); D:日; []代表取整,即只要整数部分。 W:星期;W对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四, 5-星期五,6-星期六 注意负数不能按习惯的余数的概念求余数,只能按数论中的余数的定义求余。为了 方便计算,我们可以给它加上一个7的整数倍,使它变为一个正数。 以2005年2月14日为例:C=20,Y=4,M=14,D=14
W = 4 + [4/4] + [20/4] - 2*20 + [26*(14+1)/10] + 14 - 1 = 4 + 1 + 5 - 40 + 39 + 14 - 1
= 22 (除以7余1) 所以2005年2月14日是星期一。
//get_day_from_year_month_day(2023,9,25) 1
//get_day_from_year_month_day(2005,2,14)
/以下为Javascript实现代码。
function get_day_from_year_month_day(p_year,p_month,p_day)
{
var Y=p_year%100;
var C=(p_year-Y)/100;
var M=p_month;
var D=p_day;
if(M<3)
{
M=M+12;
Y=Y-1;
}
W=Y+Math.floor(Y/4)+Math.floor(C/4)-2*C+Math.floor(13*(M+1)/5)+D-1;
return W%7;
}
测试用的html页面的源代码如下:
<html>
<head></head>
<body>
年:<input id="year" type=text value=1></input>
月:<input id="month" type=text value=6></input>
日:<input id="day" type=text value=6></input>
<input type=button οnclick="calc()" value="显示星期几"></input>
<textarea id='buffer' rows="8" cols="65"></textarea>
<hr/>
<script>
function get_day_from_year_month_day(p_year,p_month,p_day)
{
var Y=p_year%100;
var C=(p_year-Y)/100;
var M=p_month;
var D=p_day;
if(M<3)
{
M=M+12;
Y=Y-1;
}
W=Y+Math.floor(Y/4)+Math.floor(C/4)-2*C+Math.floor(13*(M+1)/5)+D-1;
return W%7;
}
function calc()
{
var p_year=parseInt(document.getElementById("year").value,10);
var p_month=parseInt(document.getElementById("month").value,10);
var p_day=parseInt(document.getElementById("day").value,10);
var result= get_day_from_year_month_day(p_year,p_month,p_day);
printf_result(result);
}
function printf_result(result)
{
if(result==0)
{
document.getElementById("buffer").innerHTML="星期天";
}
else
{document.getElementById("buffer").innerHTML="星期"+result;
}
}
</script>
</body>
</html>