星期几查询完全指南:任意日期算某天周几,从历史到未来
教你用 Zeller 同余算任意公历日期是星期几,涵盖历史日期、未来截止日、查生日纪念日落在周几,还有不用工具的心算口诀,附真实算例。
星期几查询完全指南:任意日期算某天周几
有人问我:"1969 年 7 月 20 日,人类第一次登月,那天是星期几?"我顺手填进工具,星期日。再问"我妈 1958 年 3 月 8 日出生那天呢",星期六。这种问题用手机日历翻不动,日历最多往回拨几年,你总不能一页页倒到 1958 年。这篇文章讲清楚:任意一个公历日期是星期几,到底怎么算出来,以及为什么一条几十年前的老公式比浏览器自带的日期库还可靠。
为什么日历翻不动古早日期
日历应用和 JavaScript 的 Date 对象,都是为"最近几十年"设计的。你写 new Date(66, 0, 1),本意是公元 66 年 1 月 1 日,结果它给你 1966 年。小年份被悄悄改写,远古和遥远未来直接溢出。所以查"赤壁之战那年某天周几"或者"3000 年元旦周几",靠日期库会翻车。
正确的做法是用一条闭式公式,直接从年、月、日三个数字算出星期几,不查表、不依赖日期库的内部实现。这条公式叫 Zeller 同余。
Zeller 同余:一条公式定周几
Zeller 同余把月份做了一个小手脚:把 1 月和 2 月当成上一年的"13 月"和"14 月",这样闰日那一天永远落在一年的末尾,不打乱后面的计算。处理完之后,公式长这样(格里历版本):
h = ( q + ⌊13(m+1)/5⌋ + K + ⌊K/4⌋ + ⌊J/4⌋ + 5J ) mod 7
其中:q 是日,m 是调整后的月(3 到 14),K 是年份的后两位,J 是年份的前两位(世纪)。算出来的 h:0 是星期六,1 是星期日,2 是星期一,以此类推。
我亲手算一次给你看,就拿登月那天,1969 年 7 月 20 日:7 月 m=7,q=20,年份 1969 拆成 K=69、J=19。代进去:20 + ⌊13×8/5⌋ + 69 + ⌊69/4⌋ + ⌊19/4⌋ + 5×19 = 20 + 20 + 69 + 17 + 4 + 95 = 225。225 mod 7 = 1,对应星期日。和工具给的结果一致,人类登月确实是个星期天的下午。
查生日和纪念日落在周几
这是大多数人最先想到的用法。出生那天是星期几,藏着一点小小的命运感:星期一出生的人开启了某人的一周,2 月 29 日的闰日宝宝每四年才过一次真正的生日。结婚纪念日、孩子满月、公司成立日,填进去就读出来。
填法很简单,填年份、选月份、填日,顶部直接显示星期几,还附带这天是当年第几天、ISO 周数,以及距今多少天。你可以直接用 星期几查询计算器 试一遍自己的生日,结果能复制成一句话,也能发链接给朋友,链接会原样还原那个日期。想顺带算算自己活了多少天,可以接着用 年龄计算器。
历史日期和未来截止日
历史爱好者和冷知识作者需要的是真实星期几,不是猜。填上战役、条约、发射的日期,直接读出来。这里有一个必须知道的坑:1582 年格里历改革之前,欧洲用的是儒略历,两套历法已经偏移了好几天。本工具用的是前推格里历,也就是把今天的历法一路往前推。所以你算出的"1066 年黑斯廷斯战役那天周几",和当年编年史记的可能差一两天。这不是 bug,是两套历法本来就对不齐,做跨世纪对比时统一用前推格里历反而更一致。
未来方向也一样能算。一个 200 天后到期的项目,一场两年后的婚礼,一份固定日期到期的合同,填上日期就知道它落在星期几,顺带告诉你距今多少天。知道截止日落在星期六,排期方式立刻不一样。要反过来算"今天往后推 N 天是哪天",用 日期加天数计算器 更顺手;只想知道距离某个日子还剩几天,就用 距离日期计算器。
不带工具时的心算技巧
聚会上想露一手,可以记几个"锚点"。同一年里,每个月 1 号是星期几,有一组偏移量;再记住每个月有个"末日规律":4/4、6/6、8/8、10/10、12/12 这几天在同一年里都是同一个星期几,这是有名的"末日算法"(Doomsday Rule)。先确定当年的末日是周几,再从最近的锚点数过去,练熟了几秒就能口算出某天周几。学生学 Zeller 同余时,最好的练法就是手算一遍,再和工具对一对,一眼看出错在哪一步。
顺带提醒两个常见的混淆点:当年第几天不是当月第几日,3 月 1 日是当年第 60 天(闰年第 61 天),不是第 1 天;ISO 周数也不等于"第几个周",它从当年第一个星期四所在的周算起,所以 1 月初的日期有可能属于上一年的第 52 或 53 周,这点可以用 周数计算器 确认。
把一个日期翻译成星期几,看着简单,背后是历法、闰年规则和一条优雅的同余公式。下次再有人问"那天是星期几",你可以先口算一个,再用工具验一遍。
Made by Toolora · Updated 2026-06-13