日期时间
两个日期相差多少天
日历运算坑很多:闰年、每月天数不固定,而且「一个月后」本身没有唯一含义。这里先把整天数算准,其余都从它推出来。
怎么用
- 选择起始日期和结束日期。
- 直接读取相差的天数、周数、整月数和年数。
- 工作日数量排除了周末,但不含法定节假日。
- 想反向计算就对调两个日期。
含首尾与不含首尾
1 号入住、3 号退房,是两晚,不是三天。3 月 1 日到 3 月 31 日的项目含首尾是 31 天,而这两个日期之间流逝的时间是 30 天。两个答案都对,只是回答的问题不同——大部分关于「到底几天」的争执,实质是没对齐问的是哪一个。
工作日不等于去掉周末
营业日计算跟司法辖区有关:英国的银行假日跟着复活节走,中国通过调休拼出连续假期,而以周五周六为周末的国家又是另一套。浏览器对这些一无所知,所以工作日统计只能算上限——用来做规划可以,用来定合同期限不行。
截止日、账期和那个「差一天」
相隔四天的两个日期,究竟算四天还是五天,取决于是否含首尾。房租、酒店住宿和项目工期通常按「晚」算,所以 5 月 1 日到 5 月 4 日是三晚,不是四天。合同通常两头都算。报数字之前先确定文件用的是哪种口径——这个歧义引发的账单争议,比算错还多。
工作日计数还依赖节假日表,这是算术给不出来的。从 12 月 20 日到 1 月 3 日,看着像十个工作日,在欧洲多数地方实际只有两个。
常见问题
起始日算在内吗?
天数差是把两个日期当成时间点来算的,所以 1 月 1 日到 1 月 1 日是 0 天。工作日统计的是一个日期区间,因此包含首尾两天。
工作日是怎么算的?
先按整周数乘 5,再数剩下的几天里有几个工作日。浏览器不知道法定节假日,所以不会扣除——结果是上限。
整月数有时看着差一个?
只计完整月份,和人的数法一致。1 月 31 日到 2 月 28 日虽然过了一个月的大部分,但整月数是 0。
夏令时会影响结果吗?
不会。日期会先归一化到本地零点,再对差值取整到天,一小时的偏移被吸收掉了。
怎么统计排除周末的天数?
用工作日模式,再手动减掉法定节假日——任何算术都不知道某个国家的假日表。
夏令时会影响结果吗?
只有跨切换点按小时计算时才有影响:春季那一天是 23 小时,秋季是 25 小时。按天计算不受影响。