天 · 周 · 月 · 年

日期计算器

选一个起始日期,决定加减多少,得到准确的结果日期——同时给出星期几、是当年第几天、距离今天多少天。

日期运算 月末日期按真实日历规则处理
结果日期
—

1 月 31 日加一个月,为什么不是 2 月 31 日

加「月」和加「30 天」不是一回事。月是日历单位,长度会变,所以结果取决于从哪里开始。

符合日常读法的规则是:目标月份里有这一天就保留日号,没有就用那个月的最后一天。所以 1 月 31 日加一个月是 2 月 28 日(闰年 29 日),不是 3 月 3 日。

粗糙的实现会让日期溢出——JavaScript 自带的 setMonth 默认就是这样——所以某些在线计算器算月末日期会差好几天。这里改成夹到当月最后一天。

天、周、月是三种不同的运算

加天是精确的:30 天永远是 30 天,和月份无关。按天计算的截止日期就该用这个。

加月是日历运算:1 月 1 日加一个月是 2 月 1 日(隔 31 天),而 2 月 1 日加一个月是 3 月 1 日(隔 28 天)。要固定间隔就用天。

加年同理,多一个特殊情况:2 月 29 日加一年,在非闰年会落到 2 月 28 日。

常见用途

合同与通知期。「签署后 30 天」和「签署后一个月」是两个不同日期,这个工具能让你看清自己到底说的是哪个。

跟进排期。从起始日算 90 天复盘、6 周检查点,不用掰手指。

年龄与资格核对。算某人满某个年龄的日期,或者某项申报的最后一天。

常见问题

为什么 1 月 31 日加一个月是 2 月 28 日?

因为不存在 2 月 31 日。计算器取目标月的最后一天,这也是人们读日历时实际采用的方式。

加 30 天等于加一个月吗?

不等。30 天是固定间隔,一个月的长度在 28 到 31 天之间变化。只有从 1 号开始的 31 天月份,两者才碰巧一致。

会处理闰年吗?

会。2 月 29 日加一年,在非闰年会变成 2 月 28 日;结果区还会标出目标年份是不是闰年。

能减法吗?

能。切换运算符为减号,或者直接点「切换 + / −」。

「当年第几天」是什么意思?

这个日期在当年里的序号:1 月 1 日是第 1 天,12 月 31 日是第 365 天(闰年第 366 天)。

能算两个日期之间的天数吗?

这个工具做的是加减。两个日期之间的间隔,可以看「距今天数」,或者用专门的日期差工具。