toolfree

日期相差几天

计算两个日期之间相差的天数、周数、年月日与工作日,并说明造成差一天的「含头含尾」问题。

在你的浏览器中运行

总天数
周数与天数
年、月、日
工作日

工作日计算的是中间经过的平日,不含结束当日,也未扣除法定假日。

含不含头尾

这是任何日期差都必须先回答的问题,也是两个计算器会差一天的原因。

8 月 3 日到 8 月 10 日

算法答案意思
不含尾——经过的天数7中间隔了几晚,也就是间隔多长
含头含尾——涉及的日期数8这个区间包含几个日期

本页算的是经过的天数:答案是 7,因为两个日期之间经过了 7 天。这是「相差几天」的一般含意, 也是所有程序语言的日期运算给出的结果。

会出问题的是规则本身用另一种算法写的时候。住宿、租借与部分契约预告期是含头含尾计算的——「7 晚」 的订房跨越 8 个日期——所以在相信任何一个数字之前,先确认规则指的是哪一种。

年、月、日

这个拆解是历法运算,不是除法。从 2020 年 1 月 15 日到 2026 年 8 月 7 日是 6 年 6 个月又 23 天,而这三个部分会刚好加回到目标日期,因为每一部分都是从前一部分落点 开始量的。

它不是 2396 ÷ 365。这里的「月」是 28 到 31 天的真实历月,所以:

这两件事就是各家日期库互相不一致的原因,也是任何牵涉法律或金钱的文件都会自己写明计算惯例、 而不依赖某一套实作的原因。

工作日

这里算的是中间经过的平日,不含结束当日。从星期一到下个星期一是 5 天。

有两个限制值得讲明:

真正重要的期限,请对照该地区的行事历计算,不要只看这个数字。

以整周加上剩余天数表示,因为那才是人脑记住一段时间的方式。100 天是 14 周又 2 天。

要注意一年是 52 周又 1 天,不是 52 周——这就是为什么「每四周」发一次的薪水一年会发十三次。见 天数转周数

闰年与 2 月 29 日

因为计算是以历法日期而不是固定年长度进行的,所以这些都处理得了。2024 年有 366 天,跨过 2 月 29 日的区间会比一年后的同一段长一天。

2 月 29 日在平年没有对应日。这里采用的惯例——也是多数司法管辖区在法律上采用的——是落在 3 月 1 日。

时区与日光节约

两者都不影响答案。这里处理的是历法日期而不是时间点,所以即使某一天的时钟拨动了一小时,那一天 仍然是一天。用毫秒去做同样的计算,正是差一小时那类错误的来源,而这里刻意不那样做。

全部在本机计算

两个日期与结果都留在你的浏览器里。反向的问题见 日期加减, 以生日为对象的同一套运算见 年龄计算器