反馈途径·目前大家有任务反馈可以直接发我邮箱:lyfs814@163.com陆续上线高价值工具,敬请期待! 欢迎使用蜗牛工具箱·新工具持续上线中,欢迎收藏关注。如有建议欢迎反馈! 反馈途径·目前大家有任务反馈可以直接发我邮箱:lyfs814@163.com陆续上线高价值工具,敬请期待! 欢迎使用蜗牛工具箱·新工具持续上线中,欢迎收藏关注。如有建议欢迎反馈!
v1.0 · 已上线中英双语纯客户端

日期计算Date Calculator

两个日期相差多少年月日时分秒一键算清,也可对基准日期加减任意时长。跨月自动对齐月末、闰年自动处理,纯客户端运行,数据不出本机。

本周使用—·收藏738·版本v1.0.0·最后更新3 天前·完全免费
模式
·精确到秒 · 本地时区
输入本地时区

差值按真实日历借位分解:大小月、闰年 2 月自动处理;结束早于开始时结果带负号。

输出日历精确差 · 多口径
// 计算结果会显示在这里…
·
计算

工具介绍

3 段详细说明

日期计算是处理「两个日期差多少」与「某个日期加/减一段时间」的双模式日历运算工具。选好起止日期,立即得到精确到秒的差值,并按年 / 月 / 日 / 时 / 分 / 秒多口径分解展示;反过来,给定基准日期加减一段时间,也能一键得到结果及其全格式表达。

所有运算都按真实日历规则进位:大小月、闰年 2 月、月末截断(1月31日 + 1 个月 = 2月28日)都会正确处理,不会出现「3月31日 + 1 个月跳到 5月1日」这类溢出错位。底层基于浏览器原生 Date 与 Intl,零依赖、零上传。

相比手数手指或在 Excel 里写 DATEDIF 公式,本工具打开网页即用、结果一目了然,适合项目排期、合同到期提醒、年龄工龄计算、活动倒计时等场景。支持每行一键复制、整批复制、⌘+↵ 快捷计算。

基础知识 · 日期与日历

ISO 8601 · 格里高利历

日历不是均匀的时间轴:月份长度不一、闰年补天、时区切割日期。日期计算之所以容易出错,正是因为这些「不均匀」。理解以下 6 个关键概念,就能解释绝大多数计算差异:

1month lengths大小月
1 / 3 / 5 / 7 / 8 / 10 / 12 月有 31 天;4 / 6 / 9 / 11 月有 30 天;2 月平年 28 天、闰年 29 天。口诀「一三五七八十腊,三十一天永不差」。
2leap year闰年规则
能被 4 整除且不被 100 整除,或能被 400 整除,才是闰年:2024 ✓、2100 ✗、2000 ✓。约每 4 年补一天,修正地球公转 365.2422 天与历法的偏差。
3month-end clamp月末截断
1月31日 + 1 个月 → 2月28日(闰年 2月29日)。目标月装不下原来的「日」时,截断到当月最后一天,而不是溢出跳到下个月——这是主流日期库的统一行为。
4timezone时区与夏令时
「某天」是时区相关的概念:同一时刻在北京是 10月1日,在纽约可能还是 9月30日。跨时区比较请固定用 UTC 或时间戳(见时间戳 / 时区转换工具),本工具按浏览器本地时区解析。
5natural vs business自然日 vs 工作日
两个日期相隔 7 个自然日,工作日只有 5 天(排除周末);再扣除法定节假日更少。本工具按自然日计算,避免把各国不同的假期规则写死。
6ISO 8601日期的标准写法
YYYY-MM-DDTHH:mm:ss 是国际标准 ISO 8601,也是浏览器 datetime-local 控件与 new Date() 解析的首选格式。用「T」分隔日期与时间,避免「01/02/03」这类歧义写法(美式英式含义不同)。
代码速记 · 安全的跨月加减
在代码里做日期加减,最容易踩的坑是月末溢出。先落回 1 号再改月份,最后截断「日」,即可安全跨月:
const d = new Date(2026, 0, 31); // 1月31日
d.setDate(1); // 先落回 1 号(防 3月31 → 4月3 溢出)
d.setMonth(d.getMonth() + 1); // 2月1日
d.setDate(Math.min(31, new Date(2026, 2, 0).getDate())); // 截断到 2月28日
其中 new Date(y, m, 0) 的「0 日」表示上个月最后一天,是取任意月份天数的标准技巧;闰年由 Date 原生处理,无需自己写规则。

使用说明

4 步快速入门
1
选模式
顶部工具栏切换「日期差值」或「日期加减」,默认差值
2
填日期
用日期选择器选起止时间,或加减模式下填基准日期、数量与单位
3
看结果
右侧实时显示多口径结果,未填完整会给出红字人话提示
4
复制带走
鼠标悬停结果行点复制图标取单行,或点「复制全部」一次带走

使用场景

5 个真实案例
01项目排期

kickoff 到交付日之间还剩多少天 / 多少周,按自然月精确拆解里程碑余量。

02合同与证书到期

合同签 2 年、证书有效期 3 年,从签署日一键算出到期日,提前设置提醒。

03年龄与工龄

生日到今天的精确差值,年月日分解直接得到周岁;入职日同理算工龄。

04活动倒计时

发布会、考试、抢购开始时间倒推剩余时分秒,做海报文案直接复制。

05试用期与周期续费

入职 3 个月转正日、会员 90 天后到期,加减模式一步到位,跨月自动对齐月末。

常见问题

10 个问答
日期差值是按什么口径算的?

同时给出两种口径:「精确差值」按真实日历借位分解(几年几月几天几时几分几秒),「总天数 / 总小时 / 总分钟 / 总秒」按毫秒差直接换算。前者适合人读,后者适合写进代码或报表。

为什么「1月31日 + 1 个月」结果是 2月28日?

这是日历运算的标准做法:目标月没有 31 日,就把日截断到当月最后一天(闰年为 2月29日)。这也是 Java、.NET、Python dateutil 等主流库的行为,本工具与其保持一致。

跨月借位是怎么处理的?

计算差值时若结束日的「日」小于开始日,会借结束月上一个月的实际天数(28/29/30/31),再向月借位,保证「年月日」分解始终精确,不会出现负数。

支持闰年吗?

支持。闰年规则为「4 年一闰、百年不闰、四百年再闰」,底层由浏览器 Date 对象原生处理。例:2028-02-29 加 1 年会正确得到 2029-02-28。

差值是负数怎么办?

开始时间和结束时间顺序随意。结束早于开始时,「精确差值」行会显示负号前缀(如 -1 年 2 个月),天数 / 小时等总量行始终为正数。

加减支持哪些单位?

年 / 月 / 周 / 天 / 小时 / 分钟 / 秒共 7 种。年与月按日历进位(含月末截断),其余按精确毫秒间隔,适合「90 天后」「36 小时后」这类固定时长场景。

计算用的是哪个时区?

按你浏览器当前时区解析与显示。日期选择器选的是本地时间,「北京时间」行固定按 Asia/Shanghai 显示,「UTC」「ISO 8601」为同一时刻的全球统一表达。

算的是自然日还是工作日?

按自然日(日历天)计算。工作日需排除周末与法定节假日,各国假期不同,不适合做成通用规则;如有需要可先用本工具算总天数再自行扣除。

我的数据会上传到服务器吗?

不会。所有计算在浏览器内存中完成,输入的日期不上传任何服务器。可断网使用,关闭网络后再打开仍能正常工作。

结果可以一键复制吗?

可以。鼠标悬停任意结果行会出现复制图标,单击只复制该行;也可以点底部「复制全部」,把全部口径按「字段名: 值」多行文本一次复制。

相关工具

计算分类

数据来源

隐私优先
算法:基于浏览器原生 Date 对象与 Intl.DateTimeFormat / Intl.RelativeTimeFormat,无任何第三方依赖。日历借位与月末截断在本地用原生方法实现,无 WASM、无 polyfill。
隐私声明:所有计算均在浏览器内存完成,输入的日期与时间不上传任何服务器。本工具不记录任何输入、不埋任何分析点。可断网使用,关闭网络后再打开仍能正常使用。