这个计算器能做什么
本工具用于计算一个起始日期时间与一个结束日期时间之间的精确时长(结束减开始),并以多种等价形式给出结果:总天数、按「周+天」拆分、按「天+小时」拆分、总小时数、总分钟数、总秒数,以及清晰的「天数+时:分:秒」明细。它适用于任何外推格里高利历(proleptic Gregorian)日期,因此具有通用性,不受任何国家或地区限制。
使用方法
先填写起始日期的年、月、日,以及(可选的)时、分、秒,然后用同样方式填写结束日期时间。如果你只关心整天数,把时间字段保留为 0 即可。「纪年」下拉框默认是 公元 / CE(西历年份),此时你填入的年份会被直接采用。日本的天皇年号选项(明治、大正、昭和、平成、令和)属于地区性的便捷设置:在进行任何运算之前,它们只是把你填入的年份加上一个固定偏移量,换算成西历年份,因此无论选择哪种纪年方式,得出的相差结果都完全相同。
公式详解
每个日期都会用 Fliegel-Van Flandern 算法换算成儒略日数(Julian Day Number,简称 JDN)。该算法给出的是一个连续的整日计数,能够正确处理闰年(包括世纪年规则)以及各月天数不一的情况。一天中的具体时间则以秒为单位累加进去。于是,相差的总秒数即为
$$\Delta t = \left(\text{JDN}_{e} - \text{JDN}_{s}\right)\cdot 86400 + \left(T_{e} - T_{s}\right)$$其余所有单位都是由这一个数值经过除法或拆分得到的。其中
$$\left\{ \begin{aligned} T_{s} &= 3600\,\text{Start Hour} + 60\,\text{Start Min} + \text{Start Sec} \\ T_{e} &= 3600\,\text{End Hour} + 60\,\text{End Min} + \text{End Sec} \end{aligned} \right.$$儒略日数本身则由下式给出:
$$\text{JDN} = D + \left\lfloor \frac{153m + 2}{5} \right\rfloor + 365y + \left\lfloor \frac{y}{4} \right\rfloor - \left\lfloor \frac{y}{100} \right\rfloor + \left\lfloor \frac{y}{400} \right\rfloor - 32045$$$$\left\{ \begin{aligned} a &= \left\lfloor \frac{14 - M}{12} \right\rfloor \\ y &= Y + 4800 - a \\ m &= M + 12a - 3 \end{aligned} \right.$$
实例演算
起始:2024-01-01 00:00:00;结束:2024-03-01 12:00:00。由于 2024 年是闰年,1 月(31 天)加上 2 月(29 天)共 60 个整天,再加上 12:00 这半天,所以相差时长为 \(60.5\) 天 \(= 5{,}227{,}200\) 秒 \(= 1{,}452\) 小时 \(= 87{,}120\) 分钟。拆分后即为 8 周 + 4 天,或 60 天 + 12:00:00。
常见问题
结果可能为负数吗?会的。如果结束时间早于起始时间,各项总计就会显示为负值;而明细行则显示其绝对值大小。
它会把首尾两天都算进去吗?不会。它测量的是相隔的时间间隔(结束减开始),而不是包含首尾两端的天数。
会处理闰年吗?会,而且是自动处理,包括「能被 100 整除的年份不是闰年,除非同时也能被 400 整除」这条规则。