蔡勒(Zeller)公式
蔡勒(Zeller)公式,是一個(gè)計(jì)算星期的公式蚀狰,隨便給一個(gè)日期愉昆,就能用這個(gè)公式推算出是星期幾。
公式
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
注意:
- 當(dāng)年的1,2月要當(dāng)成上一年的13,14月進(jìn)行計(jì)算
- w小于0時(shí)麻蹋,需要加7的倍數(shù)到正數(shù)后再取模
符號(hào)意義
w:星期跛溉; w對(duì)7取模得:0-星期日,1-星期一扮授,2-星期二芳室,3-星期三,4-星期四刹勃,5-星期五堪侯,6-星期六
c:世紀(jì)(注:一般情況下,在公式中取值為已經(jīng)過(guò)的世紀(jì)數(shù)荔仁,也就是年份除以一百的結(jié)果伍宦,而非正在進(jìn)行的世紀(jì),也就是現(xiàn)在常用的年份除以一百加一乏梁;不過(guò)如果年份是公元前的年份且非整百數(shù)的話次洼,c應(yīng)該等于所在世紀(jì)的編號(hào),如公元前253年遇骑,是公元前3世紀(jì)滓玖,c就等于-3)
y:年(一般情況下是后兩位數(shù),如果是公元前的年份且非整百數(shù)质蕉,y應(yīng)該等于cMOD100+100)
m:月(m大于等于3势篡,小于等于14,即在蔡勒公式中模暗,某年的1禁悠、2月要看作上一年的13、14月來(lái)計(jì)算兑宇,比如2003年1月1日要看作2002年的13月1日來(lái)計(jì)算)
d:日
[ ]代表取整碍侦,即只要整數(shù)部分。
代碼實(shí)現(xiàn)
/**
*
* @param {string} year YYYY
* @param {string} month D
*/
function getWeek(year,month) {
const C = year[0] + year[1] - 0
const y = year[2] + year[3] - 0
const m = month < 3 ? month + 12 : month
const d = 1
// 蔡勒公式
const W = f(C / 4) - 2 * C + y + f(y / 4) + f(26 * (m + 1) / 10) + d - 1
return W
}
function f(n) {
return Math.floor(n)
}