D
开发工具箱

日期差计算:别再掰着手指头数"还有多少天过年"

时间日期 2026年7月8日 约 1 分钟阅读

一次把项目周期算少一个月的汇报

年初给老板做季度规划,我手算”1 月 15 日到 4 月 15 日是 3 个月”,顺口报了 90 天。结果财务按自然日一列,1 月 17 天 + 2 月 28 天 + 3 月 31 天 + 4 月 15 天 = 91 天,而且那年是平年。差这一天让我在会上被追问”你的 90 天哪来的”,挺尴尬。

后来我发现,日期差这件事远没有”末减初”那么简单:大小月、闰年二月、工作日、是否含首尾,每一处都能差出几天。现在我一律用工具算,本文把这几个坑一次讲清。

天数、周数、月数是三套不同算法

“两个日期差多少”至少有三种常被混用的口径:

按天(最常用):直接 (结束 - 开始) / 86400000 取整。这是账期、倒计时、租期最常用的口径。

按整月/整年(日历口径):比如 1 月 31 日到 2 月 28 日,按天是 28 天,按”月”却是 0 个月 28 天(因为没满一个月)。劳动合同、订阅周期常用这种口径,它看的是”年月日各差多少”,不是总天数除 30。

按周:总天数除 7。注意它和”整月”不互斥——工具里通常同时给出”X 年 Y 个月 Z 天”和”约 N 周”。

本站工具同时给出这三种,别只盯一个数字下结论。

“包含结束当天”为什么会多一天

这是最容易和别人对不上的地方。假设开始和结束是同一天:

  • 勾选”包含结束当天”:算作 1 天(首尾都算)。适合”活动持续天数""租住天数”这种场景。
  • 不勾选:算作 0 天(只算间隔)。适合”距离某日还有几天”这种倒计时。

一个具体例子:1 月 1 日到 1 月 2 日。间隔是 1 天;若含首尾则是 2 天。和人核对时一定先说清用的是哪种口径,否则差的就是整数倍。

工作日天数:周一到周五才计数

很多场景只关心上班日:项目人天、违约计息天数、SLA 时长。工作日计数是从开始日逐天走到结束日,跳过周六周日(本工具暂不剔除法定节假日,涉及法定假日请手动调整)。

注意它和”自然日差”是独立维度:同一个区间,自然日差 10 天,工作日可能只有 7 天(跨了一个周末)。排工期时务必用工作日口径,否则会乐观估计。

日期加 / 减:月底的坑

“加 1 个月”听起来简单,但 1 月 31 日加 1 个月应该是 2 月 28 日(平年)还是 3 月 3 日?本工具按”取目标月最大日,不超过原日”的规则:1 月 31 日 +1 月 = 2 月 28 日,不会溢出到下月。加年的闰年同理,2 月 29 日加 1 年变成 2 月 28 日。

常见用法:

  • 合同起始日 + N 个月 = 到期日。
  • 今天 + 30 天 = 付款截止日(注意 30 天 ≠ 1 个月,差几天)。
  • 生日 + 1 年 = 明年纪念日,顺手看星期几。

常见速查

起止自然日差说明
同月 1 日到 31 日30 天间隔口径,含首尾为 31
1 月 15 日到 4 月 15 日90 天(平年)跨 2 月需看闰年
周五到下周周一3 天工作日仅 1 天(周一)
闰年 2 月 28 日到 3 月 1 日2 天含 2 月 29 日

常见问题

Q:为什么工具算的天数和我手算差一两天? 检查是否勾了”包含结束当天”,以及是否跨了大小月或闰年二月。手算容易把每月都当 30 天。

Q:工作日为什么比自然日少? 工作日跳过周六周日。一个跨周末的 10 天区间,工作日通常只有 7–8 天。

Q:30 天和 1 个月一样吗? 不一样。1 月 31 日加 30 天是 3 月 2 日,加 1 个月是 2 月 28 日,差好几天。

Q:闰年 2 月 29 日加一年变成哪天? 变成次年 2 月 28 日(平年没有 29 日),工具会自动收敛,不会报错。

Q:倒时差时区和日期差要一起用吗? 要。跨时区的”相差天数”得先把两地时间统一到同一时区再算,否则夏令时切换日会差一天,可配合时区转换工具使用。

Q:能不能算”距今多少天”? 可以,把开始设成今天、结束设成目标日即可;要倒计时天数就用间隔口径(不勾含结束当天)。