闰年判断工具

一条取模公式判公历闰年,同时给出 2 月天数、全年天数与 1 月 1 日的星期。

—等待输入年份

判定式:(y % 4 === 0 && y % 100 !== 0) || y % 400 === 0。第二行是它展开后的三个取模结果,先看余数再下结论,报告里不用背规则。

使用方法

  1. 在「判断年份」填 4 位公历年份(示例 2026)。也可以填 3 位(如 996)或 1 位(4),取模规则对正整数一致生效。
  2. 点「判断是否闰年」或直接在输入框按 Enter,立刻得到闰年/平年结论、2 月天数、全年天数与 1 月 1 日的星期。
  3. 想看两个年份之间隔了多久,把「对照基准年」也填上(示例 2024),页面会给出相差多少年、其中有几个闰年、2 月 29 日出现过几次。
  4. 点「复制结果」把结论拿走;点「重置」回到 2026 与 2024 这组示例。

这个闰年判断工具能解决什么问题

闰年规则只有一句话,但世纪年是绝大多数人算错的地方:被 4 整除不够,还得看它是不是 100 的倍数、是不是 400 的倍数。闰年判断工具把这三个余数直接摆出来,遇到 1900、2100 这类年份时不用在脑子里绕。

三个真实场景:一是算 2 月最后一天——做账、对账、算季度报表时,2 月 28 日和 29 日差一天,金额与工时都会差;二是校验表单里的出生日期——用户填 1900-02-29 时要能当场告诉他「1900 年 2 月没有 29 日」,而不是存进去后由数据库报错;三是预排两年后的排班表——2028 年 2 月有 29 天,2 月底的班次数量和 2027 年不同。

本页只判公历(格里高利历)闰年,不涉及农历闰月(农历的闰月规则完全不同,由 astronomical 计算确定)、也不涉及犹太历等其它历法。要在公历与农历之间换算请用农历公历转换;要查某个月的天数请用天月计算器;本页一次给你 2 月天数与全年天数,但重点是年份本身的判定。

原理与规则说明:三个取模与它们的历史来源

完整示例(数值仅作演示)

示例条件与工具默认值一致:判断年份 2026,对照基准年 2024。

星期与天数为公历确定性推算结果,不含任何节假日或调休信息。

输入范围与对照表

输入范围:年份 1 ~ 9999 的正整数,min="1" max="9999" step="1"。0 年在格里高利历中不存在(ISO 8601 从 1 起算),不作为合法输入。下表是 2024 至 2047 年的逐年判定,前 12 行直接显示。

年份余数 %4余数 %100余数 %400结论2 月天数全年天数1 月 1 日
202402424闰年29366周一
202512525平年28365周三
202622626平年28365周四
202732727平年28365周五
202802828闰年29366周六
202912929平年28365周一
203023030平年28365周二
203133131平年28365周三
203203232闰年29366周四
203313333平年28365周六
203423434平年28365周日
203533535平年28365周一
203603636闰年29366周二
203713737平年28365周四
203823838平年28365周五
203933939平年28365周六
204004040闰年29366周日
204114141平年28365周二
204224242平年28365周三
204334343平年28365周四
204404444闰年29366周五
204514545平年28365周日
204624646平年28365周一
204734747平年28365周二

四个世纪年的具体判定——这四个是「4 年一闰」直觉最容易出错的地方:

年份被 4 整除被 100 整除被 400 整除结论2 月 29 日儒略历结论
1900是是否平年不存在闰年(差 13 天)
2000是是是闰年存在闰年
2100是是否平年不存在闰年(差 14 天)
2400是是是闰年存在闰年

「差 13 天 / 14 天」指该年公历与儒略历的日期偏移量,按 floor(y/100) − floor(y/400) − 2 估算,是解释「为什么旧历书上的日期对不上现代日历」的依据。

边界与精度

常见问题

1900 年和 2000 年都被 4 和 100 整除,为什么一个平一个闰?

因为差别在 400 这条。1900 ÷ 400 = 4.75,不整除,所以按 100 的倍数排除,是平年;2000 ÷ 400 = 5,整除,补回闰年。规则是「被 100 整除时,还要再看能不能被 400 整除」,不是简单的一刀切。1900 年 2 月 28 日的第二天按公历直接是 3 月 1 日。

2100 年闰不闰?2100 年 2 月有 29 日吗?

平年,2 月只有 28 天,没有 2 月 29 日。2100 % 4 = 0、2100 % 100 = 0、2100 % 400 = 100,三个余数里前两个把它归入「100 的倍数」,第三个又不整除,所以被排除。整个 21 世纪只有 2000 一个闰年,2100 是本世纪最后一个需要特别当心的年份。

为什么会有 100 和 400 两条例外,直接 4 年一闰不行吗?

不行的。按 4 年一闰,一百年会多补 25 天,而实际只需要补约 24.22 天;多出的 0.78 天累积 128 年就成整天,季节会明显漂移。加 100 条例外后一百年只补 24 天,又少补约 0.22 天,所以再用 400 条例外补回来,最终平均年长锁定在 365.2425 天。这套修正是格里高利十三世在 1582 年训令里定的,两条例外各修掉一半误差,缺任何一条都不准。

用 JavaScript 的 new Date(2025, 1, 29) 判断闰年可以吗?

不可以,这是实测出来的静默错误。new Date(Date.UTC(1900, 1, 29)) 与 new Date(Date.UTC(2025, 1, 29)) 都不报错,而是直接返回 3 月 1 日——多余的天被归一化推走了。如果你的代码用「构造 2 月 29 日再读月份是不是 2」来判闰年,平年会被误判成闰年。正确做法是取模,或者构造后回读 getUTCDate() 确认还是 29。

闰年会影响一年 52 周还是 53 周吗?

会。ISO 8601 定义 week-based year 时,一周从星期一开始,属于同一周年的只有前 4 天含 1 月 4 日的那一周。这种定义下 53 周的年份数量是 71 个而不是 74 个,闰年不能简单对应「多一天就多一周」。本页给的是「1 月 1 日是星期几」这个基础事实,需要按周次排期请用周数字计算器。

农历也有闰月,规则和公历一样吗?

完全不一样。农历的闰月由朔望月与回归年的差决定,一个回归年约 12.368 个朔望月,累积到第 7 个闰月时插入一次,19 年内插入 7 个闰月。这不是「按 4 或 400 整除」的规则,没有取模可套。闰年判断工具只管公历,农历闰月查询请用农历公历转换。

格里高利历和儒略历差在哪天?我手上的老日历该怎么对?

差值按 floor(y/100) − floor(y/400) − 2 估算:1600 年差 10 天、1700 年差 11 天、1800 年差 12 天、1900 年差 13 天、2000 年差 13 天、2100 年差 14 天。所以 1900 年以前的公历日期,在 1582 年 10 月 15 日之后与当时实际使用的儒略历日期并不对应。查具体某天的历法换算请用农历公历转换。

这个工具免费吗?输入的年份会上传吗?

免费,无需注册。判定用的是三个取模运算,星期与天数用 Date.UTC() 在浏览器本地算完,页面不发任何网络请求,可以在开发者工具的 Network 面板里连点几次「判断是否闰年」确认请求列表始终为空。年份不写 Cookie、不写本地存储,刷新即清空。

相关工具