工具介绍
日期差用两个日期控件的值计算天数、整周、近似月和按 365.25 天折算的年。日期加减在基准日期上依次加日、加月、加年。计算都在浏览器里完成,没有节假日表。
日期差取两个 YYYY-MM-DD 的绝对毫秒差,除以 86400000 后向下取整,所以只数整天,不受电脑时区影响。周是天数除以 7 取整。月是天数除以 30.44 取整,不是日历上的月份差。年是天数除以 365.25,保留两位小数。日期加减的顺序是先 setDate,再 setMonth,再 setFullYear。某月没有那一天时,JavaScript 会把日期推进到下一个月。
计算示例
输入:2024-01-01 与 2024-03-01
输出:60 天,8 周,1 个月,0.16 年
输入:2020-02-28 与 2020-03-01
输出:2 天。2020 年有 2 月 29 日,所以不是 1 天
输入:基准 2024-01-31,加 1 个月
输出:2024-03-02。2024 年 2 月只有 29 天,31 号会被推到 3 月 2 日
使用限制
- 「1 个月」不是「差了一个日历月」。1 月 1 日到 3 月 1 日在日历上隔了两个月,按 30.44 只得到 1。
- 不算工作日,也不排除周末和法定节假日。
- 加减后的中文长日期用浏览器本地格式,ISO 那一列是 YYYY-MM-DD。
常见错误
- 用月数去对合同里的「届满一个月」。合同通常按日历月,这个工具的月是天数折算。
- 在 1 月 31 日加 1 个月,期待得到 2 月 29 日或 2 月 28 日。按页面的日期对象,2024-01-31 加 1 个月是 2024-03-02。
- 把两个日期的先后填反。天数用绝对值,较早的那天会在结果里标出来,但顺序本身不影响天数。
常见问题
2024-01-01 到 2025-01-01 为什么是 366 天?▾
2024 是闰年,中间有 2 月 29 日。折算年数是 1.00,近似月是 12,整周是 52。
只加 10 天会溢出吗?▾
2024-01-15 加 10 天是 2024-01-25,这种没有月末缺口的日子按日历走。
时区会让天数少 1 吗?▾
两个输入都是日期控件的 YYYY-MM-DD,按 UTC 零点相减,整天数不随电脑时区变化。