日期相差几天
计算两个日期之间相差的天数、周数、年月日与工作日,并说明造成差一天的「含头含尾」问题。
在你的浏览器中运行
工作日计算的是中间经过的平日,不含结束当日,也未扣除法定假日。
含不含头尾
这是任何日期差都必须先回答的问题,也是两个计算器会差一天的原因。
从 8 月 3 日到 8 月 10 日:
| 算法 | 答案 | 意思 |
|---|---|---|
| 不含尾——经过的天数 | 7 | 中间隔了几晚,也就是间隔多长 |
| 含头含尾——涉及的日期数 | 8 | 这个区间包含几个日期 |
本页算的是经过的天数:答案是 7,因为两个日期之间经过了 7 天。这是「相差几天」的一般含意, 也是所有程序语言的日期运算给出的结果。
会出问题的是规则本身用另一种算法写的时候。住宿、租借与部分契约预告期是含头含尾计算的——「7 晚」 的订房跨越 8 个日期——所以在相信任何一个数字之前,先确认规则指的是哪一种。
年、月、日
这个拆解是历法运算,不是除法。从 2020 年 1 月 15 日到 2026 年 8 月 7 日是 6 年 6 个月又 23 天,而这三个部分会刚好加回到目标日期,因为每一部分都是从前一部分落点 开始量的。
它不是 2396 ÷ 365。这里的「月」是 28 到 31 天的真实历月,所以:
- 同样的天数,会因为跨过哪几个月而换算成不同的月数。
- 把各部分以不同顺序加回去,可能得到不同的日期。从 1 月起算「六个月又 23 天」,和「23 天又 六个月」不是同一天。
这两件事就是各家日期库互相不一致的原因,也是任何牵涉法律或金钱的文件都会自己写明计算惯例、 而不依赖某一套实作的原因。
工作日
这里算的是中间经过的平日,不含结束当日。从星期一到下个星期一是 5 天。
有两个限制值得讲明:
- 没有扣除国定假日。 假日因地而异,而且每年都在移动——农历春节、复活节,以及每一个补假 ——所以一个宣称能处理假日的通用计算器,对大多数使用者来说都会是错的。
- 默认一周工作日为周一到周五。 这并非放诸四海皆准。
真正重要的期限,请对照该地区的行事历计算,不要只看这个数字。
周
以整周加上剩余天数表示,因为那才是人脑记住一段时间的方式。100 天是 14 周又 2 天。
要注意一年是 52 周又 1 天,不是 52 周——这就是为什么「每四周」发一次的薪水一年会发十三次。见 天数转周数。
闰年与 2 月 29 日
因为计算是以历法日期而不是固定年长度进行的,所以这些都处理得了。2024 年有 366 天,跨过 2 月 29 日的区间会比一年后的同一段长一天。
2 月 29 日在平年没有对应日。这里采用的惯例——也是多数司法管辖区在法律上采用的——是落在 3 月 1 日。
时区与日光节约
两者都不影响答案。这里处理的是历法日期而不是时间点,所以即使某一天的时钟拨动了一小时,那一天 仍然是一天。用毫秒去做同样的计算,正是差一小时那类错误的来源,而这里刻意不那样做。