使用指南
两个日期之间到底有几天:算法与常见错误
减法本身很简单,难的是「算不算首尾」。讲清楚区间计数与包含计数、闰年什么时候真的会改变答案,以及最常见的差一天错误。
更新于: 2026-10-19 · 约 6 分钟
两个日期相减,看起来是计算器上最简单的一件事。但账单争议、错过截止日、差一天的错误,很大一部分都出在这里。减法不难,难的是先确定该减什么。
同一个问题,其实藏着两个问题
有人问「周一到周五有几天」,答案可能是四天,也可能是五天,取决于首尾算不算。这一处歧义,解释了大部分关于日期计算的分歧,所以在报出任何数字之前,先把口径定下来。
本站采用的是「区间计数」:两个日期之间完整经过了多少天,所以同一个日期相减得到 0。周一到周五是四天。另一种是「包含计数」,首尾都算,酒店住几晚、租期、法律通知期常用这种口径,周一到周五是五天。
- 区间计数:两个时刻之间经过了多长时间。同一天 = 0。
- 包含计数:这段区间覆盖了几个日历日期。同一天 = 1。
- 酒店 1 号入住、3 号退房,是两晚,但占了三个日期。
手算:按月切开最稳
可靠的手算方法不是去背每个月几天,而是在月份边界处把区间切开:先数第一个月剩下的天数,加上中间每个整月的天数,再加最后一个月用掉的天数。
以 3 月 12 日到 6 月 9 日为例:3 月过了 12 号还剩 19 天(31 − 12),4 月 30 天,5 月 31 天,6 月 9 天,合计 89 天。这样算,你只需要知道真正碰到的那几个月的长度。
反过来也一样。要找一个截止日往前 90 天是哪天,先减整月,接近之后再逐日数。直接按 30 天一块减很诱人,但是错的——一年里只有四个月是 30 天。
闰年到底在哪里起作用
闰年多出 2 月 29 日,所以任何跨过这一天的区间,在闰年都会比平年多一天。2028 年 2 月有 29 天,2027 年 2 月只有 28 天。这就是全部影响,而且只作用于包含 29 号的那些区间。
公历规则比「四年一闰」稍微复杂:能被 4 整除的是闰年,但能被 100 整除的不是,除非它还能被 400 整除。所以 2000 年是闰年,1900 年不是,2100 年也不会是。
跨度一长,这件事就不能忽略。30 年房贷、20 年周年纪念,按起始日期不同会包含五个或六个闰日;按 365 天折算年薪的系统,会和按 365.25 天计算的系统悄悄产生偏差。
最常见的差一天错误
几乎每一个错误答案,都来自下面这几种情况之一。花一分钟检查,比重新算一遍更快。
- 问题问的是区间,却把首尾都算了;或者反过来。
- 把日期当成时间戳:1 号 23:00 到 2 号 01:00 是两小时,但也跨了一个日历日。
- 表格把 03/04/2026 解析成 4 月 3 日,而原文意思是 3 月 4 日。
- 把天数换算成月数时,默认每个月都是 30 天。
- 忽略夏令时:切换那天,一个日历日只有 23 或 25 小时。
天怎么换成周和月
周是精确的,除以 7 就行。月不是,因为日历月从 28 天到 31 天不等。除以 30.437(公历平均月长)得到的数字,用来看量级可以,用在合同里就是错的。
如果文件写「一个月」,它几乎从来不等于 30 天。它通常指「下个月的同一天」,并对天数不足的月份另有规则。这是日历运算,不是除法,值得单独处理。