🧰 UtlKit

如何计算两个日期之间的差值——天、周与工作日

基本思路

两个日期的差值就是它们相隔多远——按天、周、月或年。基本单位是天:晚的日期减早的日期,以天计数。其余单位(周、月、工作日)都是对这个天数按不同约定的重新表达。

实例:2026 年 3 月 15 日 到 2026 年 12 月 1 日

从 3 月 15 日到 12 月 1 日按月数天:

  • 3 月 15 日 → 3 月 31 日:16 天
  • 4 月:30,5 月:31,6 月:30,7 月:31,8 月:31,9 月:30,10 月:31,11 月:30 → 244 天
  • 12 月 1 日:+1

合计:261 天(不含起始日、含终止日——标准减法)。

换一种表达:261 天 = 37 周零 2 天。按日历:3 月 15 日到 11 月 1 日是 8 个月,再加 16 天,即 8 个月 16 天

工作日(仅周一至周五):从周日起的 261 天包含 185 个整周工作日,加上最后一周的周一和周二——187 个工作日

天、周、月、年——约定

  • ——简单相减。唯一"精确"的单位,但要注意含/不含端点计数(见下)。
  • ——天数 ÷ 7。261 天 = 37.29 周,即 37 周 2 天。
  • ——按日历月数(3 月 15 日 → 4 月 14 日是一个月)。月长不等,所以"一个月"永远不是固定天数。部分金融场景用 30 天月;其他用实际/实际。
  • ——365 天,或计入闰年的 365.25,或区间实际天数(金融中有 360、365 或 365.25 等约定,如 30/360)。

含端点与不含端点计数

"从周日到周五"按减法算 4 天,但若两端都数则是 5 天。从 1 日到 3 日的住宿是 2 晚而非 3 天。务必说明约定——在合同和截止日里,"含首尾两日"会让数字差 1。

时区

"日期"只在特定时区内有意义。东京 6 月 12 日的会议和纽约 6 月 12 日的截止是不同的时刻,跨日界线比较两个时区的"6 月 12 日"时,中间的天数可能偏移。为整个计算选定一个时区并始终使用。

替你算的工具

要天/周/月/周末的分解,日期差计算器输入两个日期即可返回天、周、月、年、工作日及各日期的星期。针对特定场景——某人多大?——年龄计算器把终止日锚定到"今天",返回精确到年月日的年龄,并处理闰日。开发者若用纪元时间,Unix 时间戳转换器给你秒数:差值除以 86,400 即得天数。三者都在浏览器本地运行。

常见陷阱

  • 混用约定——"30 天"(银行 30/360)与"实际天数"在同一组日期上给出不同答案。
  • 忘记端点——差一错误是代码和合同中最常见的日期 bug。
  • 闰年——2024 年有 366 天;跨越闰年 2 月的区间比日历直觉多 1 天。
  • 时区漂移——先统一转成 UTC 再计数,可避免"到底算哪一天"的争论。

相关工具

常见问题

怎么算两个日期之间有多少天?

把早的日期从晚的日期中按天相减,或逐月累加。例如:2026 年 3 月 15 日到 12 月 1 日 = 3 月的 16 天 + 4 月到 11 月的 244 天 + 12 月 1 日的 1 天 = 261 天。日期差计算器可即时完成,并同时给出周、月和工作日。

日历天数和工作日有什么区别?

日历天数包含周末和节假日的每一天。工作日只数周一到周五(正式用法中还排除公共假期)。上述 261 天的例子,工作日数是 187。合同和付款期限通常都会写明用的是哪一种。

应该数起始日还是终止日?

必须明确说明。"A 到 B 的天数"通常不含起始日、含终止日(普通减法即得)。"含首尾两日"会多 1 天。从 1 日到 3 日的住宿按标准约定是 2 晚;合同若写"含首尾"则算 3 天。务必写明适用哪种约定。

怎么精确计算年龄?

用出生日期到今天的年、月、日计算:先数整年,再数剩余的整月,最后是零头天数。例如:1990 年 3 月 15 日出生,截至 2026 年 12 月 1 日为 36 年 8 个月 16 天。对于 2 月 29 日的闰日生日,多数系统平年在 2 月 28 日、闰年在 3 月 1 日庆祝;法律处理因地区而异。

相关文章