这个计算器能帮你算什么
多数时候我们要的不是"某天是星期几",而是两个日子之间隔了多久。 买了台设备,保修两年,想知道哪天到期;接了活,对方说"工期 45 天",想确认交付日是哪天; 公司规定入职满一年才有年假,想提前把日子记下来;签了合同,想知道还剩几天到期。 这些问题的共同点是:起止日期里总有一个是未知的,要靠加减或相减求出来,而手算最容易错的就是跨月和闰年。 下面三个面板分别对应算差值、日期加减和今天的基础信息。
闰年到底怎么判断
规则就三句:能被 4 整除的年份是闰年;但能被 100 整除的不是闰年;再但,能被 400 整除的又是闰年。 所以 1900 年不是闰年,2000 年是闰年,2024 年是闰年,2100 年不是。
之所以绕这么一圈,是因为地球绕太阳一圈约 365.2422 天,不是整整 365 天。 按 365 天算,每年少 0.2422 天,四年攒够约一天,于是每 4 年补一个 2 月 29 日; 可 0.2422 比 0.25 小一点,这样补又补多了,100 年多补约一天,于是整百年不闰,把这天扣回来; 扣完又略微扣多,400 年再补一次。三条规则合起来就是通行公历的置闰方式,误差小到几千年才差一天。
闰年影响的正是最容易出错的地方:2 月从 28 天变成 29 天,全年从 365 天变 366 天。 只要计算区间跨过 2 月底,闰年判错结果就差一天。本工具的"今年第几天""今年还剩多少天"都用到了它。
"相差多少天"为什么会有不同答案
同样问"从 3 月 1 日到 3 月 10 日相差几天",至少有三个答案,而且都不算错:
- 算不算首尾:只数中间隔了几天是 9 天;两头都算进去是 10 天。算间隔通常不含,算工期、请假通常要含。
- 按自然日还是工作日:自然日天天都算;工作日要剔掉周六周日,9 个自然日里可能只有 5 到 7 个工作日。工作日必须一天一天数,用"总天数 ÷ 7 × 5"估算一定出错,因为首尾往往不是完整的周。
- 跨不跨时区:同一条"3 月 10 日"的记录,服务器上可能是 UTC,你这里是东八区,相差 8 小时;只要记录带具体时刻并跨过午夜,就会差一天。
平时心里有数就行,但碰到合同到期、报名截止、考试时间这类事,差一天是要紧的: 对方说的"30 天内"从哪天起算、含不含当天,最好写在文字里,别靠各自理解。
为什么日期计算容易差一天
很多时候不是你算错,是工具用错。JavaScript 里有个很有名的坑:
new Date('2026-01-01') 这种只写到日期的字符串,会被当成 UTC 午夜解析,
而不是你所在时区的午夜。国内是东八区,比 UTC 早 8 小时,这个对象在本地看来其实是
2026-01-01 08:00;换成西半球的时区,它甚至可能变成 2025 年 12 月 31 日。
再拿它去和别的日期相减,只要中间夹了一次时区换算,结果就漂了一天。
正确做法是明确告诉浏览器这是本地日期:用 new Date(2026, 0, 1)
这种"年、月、日"三个数字的写法,注意月份从 0 开始数(0 就是 1 月)。
本工具全程按你电脑的本地时区计算,不用 UTC 格式化输出,整日的加减统一按日历天处理,不受夏令时影响。
怎么用
- 相差天数:选好两个日期点计算,除了总天数,还会给出周数零几天、月数估算、含首尾天数、去掉周末的工作日天数,以及各自的星期和第几天。
- 日期加减:选起始日期,填数字,选单位,点"加"或"减"。月末溢出会自动收拢到当月最后一天,并明确提示。
- 今天信息:打开页面就自动算好,不用点。
提醒一句:涉及合同、考试、报名的截止日期,请以官方口径(含不含当天、按哪个时区)为准,本工具只帮你算草稿。 全部计算都在你的浏览器里完成,不会上传,也不会被保存。