日期计算Date Calculator
两个日期相差多少年月日时分秒一键算清,也可对基准日期加减任意时长。跨月自动对齐月末、闰年自动处理,纯客户端运行,数据不出本机。
差值按真实日历借位分解:大小月、闰年 2 月自动处理;结束早于开始时结果带负号。
工具介绍
3 段详细说明日期计算是处理「两个日期差多少」与「某个日期加/减一段时间」的双模式日历运算工具。选好起止日期,立即得到精确到秒的差值,并按年 / 月 / 日 / 时 / 分 / 秒多口径分解展示;反过来,给定基准日期加减一段时间,也能一键得到结果及其全格式表达。
所有运算都按真实日历规则进位:大小月、闰年 2 月、月末截断(1月31日 + 1 个月 = 2月28日)都会正确处理,不会出现「3月31日 + 1 个月跳到 5月1日」这类溢出错位。底层基于浏览器原生 Date 与 Intl,零依赖、零上传。
相比手数手指或在 Excel 里写 DATEDIF 公式,本工具打开网页即用、结果一目了然,适合项目排期、合同到期提醒、年龄工龄计算、活动倒计时等场景。支持每行一键复制、整批复制、⌘+↵ 快捷计算。
基础知识 · 日期与日历
ISO 8601 · 格里高利历日历不是均匀的时间轴:月份长度不一、闰年补天、时区切割日期。日期计算之所以容易出错,正是因为这些「不均匀」。理解以下 6 个关键概念,就能解释绝大多数计算差异:
month lengths大小月31 天;4 / 6 / 9 / 11 月有 30 天;2 月平年 28 天、闰年 29 天。口诀「一三五七八十腊,三十一天永不差」。leap year闰年规则2024 ✓、2100 ✗、2000 ✓。约每 4 年补一天,修正地球公转 365.2422 天与历法的偏差。month-end clamp月末截断1月31日 + 1 个月 → 2月28日(闰年 2月29日)。目标月装不下原来的「日」时,截断到当月最后一天,而不是溢出跳到下个月——这是主流日期库的统一行为。timezone时区与夏令时natural vs business自然日 vs 工作日7 个自然日,工作日只有 5 天(排除周末);再扣除法定节假日更少。本工具按自然日计算,避免把各国不同的假期规则写死。ISO 8601日期的标准写法YYYY-MM-DDTHH:mm:ss 是国际标准 ISO 8601,也是浏览器 datetime-local 控件与 new Date() 解析的首选格式。用「T」分隔日期与时间,避免「01/02/03」这类歧义写法(美式英式含义不同)。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 步快速入门使用场景
5 个真实案例kickoff 到交付日之间还剩多少天 / 多少周,按自然月精确拆解里程碑余量。
合同签 2 年、证书有效期 3 年,从签署日一键算出到期日,提前设置提醒。
生日到今天的精确差值,年月日分解直接得到周岁;入职日同理算工龄。
发布会、考试、抢购开始时间倒推剩余时分秒,做海报文案直接复制。
入职 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。