跳到主内容
UniKit

日期计算

两个日期天数差在线计算含工作日:给出年月日差值、总天数与总月数、完整周数、工作日与周末数,以及小时、分钟、秒,按公历整数天数计算,不受时区影响。

浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。

日期设置

日期按公历整数天数计算,与本地时区无关;支持 YYYY-MM-DD、YYYY/MM/DD、DD.MM.YYYY、MM/DD/YYYY,可附加 HH:mm:ss。

差值结果

填入两个日期后点击「计算差值」。

这个工具能做什么

  • 算清两个日期之间到底差多少天:出差天数、账单周期、项目工期,一眼看到总天数与完整周数。
  • 报销或请假时按「工作日」核对:结果同时给出工作日与周末数,口径是 [较早日期, 较晚日期) 半开区间,与总天数完全对齐。
  • 处理月末与闰日这类容易算错的情况:2024 年 1 月 31 日到 2 月 29 日是「1 个月 0 天」,2023 年同样的日子则夹到 2 月 28 日。
  • 跨时区排期、合同起止这类只需要纯日期的场景:所有运算基于整数天数序号,不受本地时区与夏令时影响。

示例

输入

开始日期 2024-01-31,结束日期 2024-02-29

输出

日历差值:1 个月 0 天;总月数 1;总天数 29;完整周数 4;工作日(周一至周五)21;周末(周六、周日)8;小时 696;分钟 41760;秒 2505600

工作日与周末按 [2024-01-31, 2024-02-29) 半开区间统计,区间不含结束当天,所以工作日 + 周末 = 总天数。

常见问题

日期输入支持哪些格式?

支持 2024-02-29、2024/2/9、29.02.2024、02/29/2024,还可以在日期后加时间,例如 2024-01-01 06:30:15。顺序由分隔符决定:点号分隔按「日.月.年」,斜杠分隔时第一段是 4 位数按「年/月/日」,最后一段是 4 位数按「月/日/年」。

为什么 1 月 31 日到 2 月 29 日显示「1 个月 0 天」?

因为按月平移时会把「日」夹到目标月的最后一天:2024-01-31 加 1 个月正好是 2024-02-29,等于结束日期,所以余 0 天。2023 年同理,2023-01-31 加 1 个月是 2023-02-28。换成总天数看就是 29 天(2023 年是 28 天),两种说法是同一件事。

结束日期早于开始日期会怎样?

结果全部按绝对值给出,方向单独用「方向」一行标注(结束日期在开始日期之前),所以天数和周数不会出现负数。想要带符号的天数,可以在结果前自己加一个负号。

工作日和周末是怎么统计的?

按 [较早日期, 较晚日期) 半开区间逐日判断周一至周五与周六周日,区间不包含结束当天,因此工作日 + 周末恒等于总天数。如果你要把起止两天都算进去,把结束日期往后加一天即可。

会受时区或夏令时影响吗?

不会。模块用整数天数序号(Howard Hinnant 的 days_from_civil 算法)做全部运算,不经过 Date 对象,所以同一组输入在任何时区、任何季节都得到同样的结果,也不会出现夏令时切换那天差一小时的问题。

关键词:date diffdate differencedays between datesdate durationweekdays between dates日期计算日期差值天数差两个日期相差几天工作日日期差计算日期相差天数

同类工具