日期运算入门:两个日期差几天,加减天数
2026-09-03
「离截止日期还有多少天?」「45 天后是几月几号?」这是规划中不断出现的问题,而且远比看起来容易算错。一个月并不总是 30 天,二月随闰年变化,而在一月底加上 30 天可能落到不同日期,具体取决于年份。
这篇指南解释为什么日期运算棘手、标准规则如何解决它,以及如何在几秒钟内得到准确答案。
为什么日期比看起来更难
世界上多数地方使用的公历有一些别扭的规则:
- 长短月。 月份有 28、30 或 31 天,所以「1 月 15 日的一个月后」并不总是简单的「2 月 15 日」。
- 闰年。 二月每四年多一天,但能被 400 整除的世纪年除外。所以 2000 是闰年,1900 不是。
- 跨年。 在 11 月加 90 天会跨到明年,而边界附近的心算容易出错。
这些规则正是「差一天」成为经典 bug 的原因。对随意计划来说差 7 天可能无所谓,但对合同期限、付款日期或倒计时来说就有问题了。
你最常用的两个操作
日期计算归根到底是两个操作:
- 两个日期相差几天。 选定开始和结束日期,工具返回总天数——外加周、月、年等值。这是「项目还有多久上线」或「离我生日还有几天」所需的。
- 加或减天数。 从一个基准日期开始加若干天——或用负数向前倒推。这回答了「今天起 45 天后是几号?」或「30 天前是几号?」。
好的计算器会给你更有用的附带信息:星期几、是否是周末、以及该年是否闰年。
把日期运算派上用场
当你知道了总天数,常常可以把它换算成周或月,使计划更直观。但要把两个操作分清:「相差天数」告诉你的是时长;「加/减」告诉你的是某个时间点。混用是常见错误——一个是距离,一个是目的地。
要同时用日期和时钟,时间戳转换是天然搭档。Unix 时间戳就是自 1970 年 1 月 1 日以来的秒数,在时间戳和人类可读日期之间转换,只是换了个问法提出同一个问题。
年龄与更长的跨度
同样的日期运算也支撑着年龄计算。一个人的年龄是其出生日到今天之间经过的完整年数——而「完整年数」由历法定义,不只是数数。这就是为什么年龄计算器与日期计算器使用同一套公历规则:它要处理闰日生日、长短月,以及某人正好在几月几号又长一岁。
快速参考
- 日期心算不可靠:月有长短、二月随闰年变化、跨年会让心算出错。
- 两个操作搞定大多数需求:「两个日期相差几天」给出的是时长;「加减天数」给出的是目的地。别混用。
- 闰年:每四年一次,世纪年需能被 400 整除(2000 是,1900 不是)。
- 日期计算器能消除差一天的错误;年龄就是用同一套公历规则计算完整年数。
- 日期还要带上时钟时间,交给 Unix 时间戳——它是自 1970 年 1 月 1 日以来的秒数。
开始使用
如果你需要两个日期的相差天数,或今天起的一个日期偏移,日期计算器会为你处理闰年、长短月和跨年。要算年龄,年龄计算器把出生日期变成精确年龄。而当你和代码、日志或 API 打交道时,时间戳转换在 Unix 时间戳与可读日期之间架起桥梁。