怎么算两个日期相差多少天?日期差全攻略
"我们在一起多少天了?""这个项目还剩几个工作日?""押金退还期限到哪天?"——这些问题看起来都是简单减法,但真动手算时,跨月、跨年、闰年、端点算不算、要不要扣周末,随便一个环节出错,结果就差好几天。这篇文章把日期差计算的所有坑一次讲明白。
日期差的两种口径:自然日与工作日
自然日(Calendar Days)
自然日就是日历上实实在在过去的天数,包含周末和节假日。这是最基础的口径,也是法律文书、合同期限、医学观察期的默认口径。
工作日(Business Days / Working Days)
工作日只统计周一到周五,扣除周末;在国内还要额外扣除法定节假日,但需要加回调休上班的周末。
两者的差距非常可观。以 30 个自然日为例,大约只对应 21~22 个工作日;100 个自然日约对应 71 个工作日。如果合同写"30 个工作日内交付",实际期限接近 6 周而不是 1 个月。
| 自然日 | 约等于工作日 | 约等于周数 |
| 7 | 5 | 1 |
| 14 | 10 | 2 |
| 30 | 21~22 | 约 4.3 |
| 60 | 42~43 | 约 8.6 |
| 90 | 64~65 | 约 12.9 |
| 180 | 128~130 | 约 25.7 |
| 365 | 260~261 | 52 |
一年 365 天里有 52 个完整周共 104 个周末日,所以工作日基数是 261 天,再扣掉国内 11 天法定假日(部分与周末重合),实际约 250 天。这个"250 个工作日"是做人力成本核算时的常用基数。
最大的坑:端点算不算
这是日期差里唯一真正容易吵起来的问题。
假设从 3月1日 到 3月10日:
- 差值算法(不含首日):10 − 1 = 9 天。这是"相隔多少天"的答案。
- 包含两端算法:9 + 1 = 10 天。这是"总共跨越多少天"的答案。
两种结果都对,取决于问的是什么。判断标准很简单:
问"间隔/相差"用 9,问"共计/持续"用 10。
不同场景的惯例
| 场景 | 通行口径 | 说明 |
| 住院天数 | 含首尾 | 3/1 入院 3/10 出院算 10 天 |
| 酒店住宿 | 不含末日 | 3/1 入住 3/10 退房算 9 晚 |
| 合同履行期 | 通常不含首日 | "自签订之日起 30 日内" |
| 项目工期 | 含首尾 | 3/1 开工 3/10 完工共 10 个工作日 |
| 年假计算 | 含首尾 | 请假 3/1–3/3 扣 3 天 |
| 恋爱纪念日 | 含首日 | 确定关系当天记为第 1 天 |
| 银行计息 | 算头不算尾 | 存入日计息,取出日不计 |
"算头不算尾" 是金融领域的标准做法,务必记住。存款 3月1日 存入、3月10日 取出,计息天数是 9 天。
手工计算方法
如果不用工具,可以用"儒略日序数"的思路:把每个日期转换成"从某个固定起点算起的第几天",再做减法。
一个简化的手算方法是分段累加:
例:2024年3月15日 到 2024年11月8日
- 3月剩余:31 − 15 = 16 天
- 4~10 月整月:30 + 31 + 30 + 31 + 31 + 30 + 31 = 214 天
- 11月:8 天
- 合计:16 + 214 + 8 = 238 天
跨年时再加上中间的整年天数(平年 365,闰年 366)。
闰年判定规则
能被 4 整除 → 闰年
但能被 100 整除 → 不是闰年
但能被 400 整除 → 又是闰年
所以 1900 年不是闰年,2000 年是闰年,2024 年是闰年,2100 年不是闰年。跨越 2 月的日期差如果忽略闰年,会少算 1 天。
真实场景算例
场景一:项目工期倒排
项目要求 2026年6月30日 交付,今天是 2026年4月10日。
- 自然日:4月剩 20 天 + 5月 31 天 + 6月 30 天 = 81 天
- 折算工作日:81 ÷ 7 × 5 ≈ 57.9,实际约 58 个工作日
- 再扣除 5月1日劳动节假期(假设 3 天中有 1 天为工作日调休),约 57 个工作日
如果团队 5 人,每人每天有效产出 6 小时,总人力预算 = 57 × 5 × 6 = 1710 人时。这才是排期的真实依据,直接按"还有两个多月"拍脑袋会严重高估产能。
场景二:恋爱纪念日
确定关系日 2023年5月20日,想知道到 2026年8月4日 是第几天。
- 2023/5/20 → 2024/5/20:366 天(含 2024年2月29日)
- 2024/5/20 → 2025/5/20:365 天
- 2025/5/20 → 2026/5/20:365 天
- 2026/5/20 → 2026/8/4:11 + 30 + 31 + 4 = 76 天
- 合计:366 + 365 + 365 + 76 = 1172 天(不含首日)
若按"确定关系当天为第 1 天"的习惯,则是 第 1173 天。想提前知道"1314 天"落在哪天,也是同一套逻辑反推。
场景三:租房押金退还
合同约定"退租后 30 个自然日内退还押金"。2026年3月15日 退租:
- 3月剩余 16 天(3/16 至 3/31)
- 4月需 14 天 → 到 4月14日
如果合同写的是"30 个工作日",30 个工作日 ≈ 42~44 个自然日,期限将推迟到 4月28日左右。签合同时一定要看清是自然日还是工作日,这两个字的差距是两周。
场景四:证件到期提醒
护照 2027年2月28日 到期,多数国家要求入境时护照有效期剩余 6 个月以上。倒推 6 个月即 2026年8月28日 之后就不能再用它办签证了。这类反向推算很容易忘记,建议算出来后直接设日历提醒。
用工具计算最省事
手算适合理解原理,日常还是直接用日期差计算工具最快。使用步骤:
- 输入开始日期和结束日期
- 选择是否包含结束日(对应前面说的端点问题)
- 结果会同时给出总天数、周数、月数、年数的多种表示
- 需要工作日时切换到工作日模式,自动扣除周末
工具还能反向计算:"从今天起 100 天后是哪天"这类需求,在算试用期结束、产品保质期、疫苗第二针时间时非常实用。
三条实用建议
- 书面约定必须写明口径。合同里写"30 日内"要补充"自然日"或"工作日",写"自 X 日起"要说明是否含当日。一个字的模糊可能引发纠纷。
- 涉及金钱的按"算头不算尾"。利息、罚息、滞纳金的行业惯例如此,除非另有约定。
- 跨 2 月的计算务必检查闰年。特别是 2 月 29 日出生的人计算年龄、2 月签订的年度合同,都要单独核对。
需要重复计算多个日期区间时,建议把日期差计算工具收藏起来,比每次打开 Excel 写公式快得多,也不会因为单元格格式问题算错。