日期差计算

两日期间天/周/月/年差

418 次访问

两日期相差

起始日期时间

结束日期时间

说明

· "工作日" = 总天数 − 周末(六/日)− 法定节假日 + 调休补班

· "月数 / 年数" 按日历月份计算,不是 30 / 365 天近似

· 跨闰年自动处理 2 月 29 日

关于本工具

了解工具定位 · 使用场景 · 对比优势

计算两个日期之间相隔多少天、周、月或年。项目管理排工期、合同算履约天数、人事核入职时长、财务对账算账期,直接输入起止日期即可。所有计算在浏览器内完成,日期数据不上传服务器。

使用场景

📅

项目工期计算

项目经理需要精确计算两个里程碑之间的工作日数(排除周末和法定假日),以排定开发、测试、上线各阶段的时间表。使用本工具输入起止日期,直接获得精确的天数差,比手动翻日历更高效,避免因日期计算错误导致项目延期或资源错配。

💰

借款利息核对

个人借贷中,按日计息的利息计算依赖准确的借款天数。借款人输入放款日和还款日,本工具精确算出实际占用天数,再结合约定的日利率即可快速核对利息总额。这比估算或按整月计算更公平,避免因天数分歧产生纠纷。

🎓

学籍年限核查

教务人员或学生本人需要确认从入学到毕业的实际在校月数或学年数,以判断是否符合毕业资格或升学条件。本工具直接输出月差和年差,结果精确到小数点后一位,比手动计算月份差更准确,避免因月份起止点理解不同导致误判。

合同到期预警

租赁合同或服务协议到期前,需要提前计算剩余天数以安排续签或终止流程。输入合同起始日和到期日,本工具直接给出剩余天数,并可换算成周数,方便设置多个时间节点的提醒(如提前 30 天、15 天),避免因遗忘导致自动续约或违约损失。

🏠

装修工期规划

装修业主与施工方约定工期时,需要明确从开工到完工的总天数,并拆解为多个阶段(水电、泥瓦、木工等)。使用本工具输入开工日和计划完工日,快速得到总工期天数,再按比例分配各阶段时长,确保进度可控,避免口头约定的模糊天数引发扯皮。

对比矩阵本工具 vs 竞品 vs 传统方法

维度本工具日期计算器 (timeanddate.com)手动计算
数据隐私纯浏览器,零上传上传到服务器处理完全本地,无数据外泄风险
处理速度1 秒内1-3 秒(含网络延迟)数分钟至数小时(视日期跨度)
离线可用完全支持不支持完全支持
计算范围公历日期,无年份限制公历日期,支持公元 1 年至 9999 年取决于个人知识,无理论限制
结果单位天、周、月、年(含小数)天、周、月、年(含小数),支持工作日通常仅天或月
注册要求无需注册无需注册无需注册
收费免费免费免费

使用指南

上手步骤 · 输入输出 · 避坑提示

使用步骤

  1. 在「开始日期」和「结束日期」输入框中分别选择或手动输入两个日期
  2. 点击「计算差值」按钮,页面立即显示两日期间的天数差
  3. 查看结果区中的「周数」「月数」「年数」行,获取对应单位下的差值
  4. 如需调整日期,直接修改输入框内容并重新点击「计算差值」

输入输出示例7 个典型场景,覆盖常规、边界与易错

输入输出说明
2024-01-01 至 2024-01-109 天典型场景:同月内日期差
2023-12-25 至 2024-01-0511 天典型场景:跨年日期差
2024-01-01 至 2024-12-31365 天 | 52 周 1 天 | 12 个月 | 1 年典型场景:整年跨度,含闰年
2024-02-28 至 2024-03-012 天边界 case:闰年 2 月 29 日前后
2024-01-01 至 2024-01-010 天边界 case:起止日期相同
2024-01-10 至 2024-01-019 天易错 case:起始日期晚于结束日期
2024-01-01 至 2024-01-32错误:日期不合法易错 case:用户输入无效日期

常见错误对照7 个常踩的坑 · 错误 → 修复

1. 结束日期早于开始日期

错误
开始:2025-01-01,结束:2024-12-25
修复
开始:2024-12-25,结束:2025-01-01

日期差计算默认按「结束 - 开始」顺序。如果结束日期早于开始日期,结果会显示负值,不符合多数用户预期。

2. 月份差与天数的混淆

错误
从 1 月 31 日到 2 月 28 日,期望结果为「1 个月」
修复
理解该结果为「0 个月 28 天」或「28 天」

月份差算法通常以「同一天」为基准(1/31→2/28 不足一个月),不会自动按「月底对齐」补足天数。

3. 年份差忽略闰年 2 月 29 日

错误
2020-02-29 到 2021-02-28,认为刚好 1 年
修复
实际结果为 364 天或 0 年 364 天

2020 是闰年有 2/29,2021 是平年无 2/29,从 2/29 到次年 2/28 不足一整年。

4. 日期格式混用分隔符

错误
2025/01/01 和 2025-01-01 混用
修复
统一使用 2025-01-01 或 2025/01/01

工具对输入格式敏感,混用斜杠和连字符可能导致解析错误或意外结果。建议统一为 ISO 8601 格式。

5. 时间部分被包含在内

错误
输入 2025-01-01 08:00:00 和 2025-01-02 20:00:00
修复
输入 2025-01-01 和 2025-01-02

本工具只计算日期差,忽略具体时间。带时间输入会被截断至 00:00:00,结果可能比预期少 1 天。

6. 跨时区导致日期偏移

错误
UTC+8 用户输入「2025-01-01」但浏览器时区设为 UTC-5
修复
确认浏览器时区与本地时区一致后再输入

工具使用浏览器本地时区解析日期。如果时区设置错误,同一字符串可能被解释为前一日或后一日。

7. 周数结果误解为自然周

错误
从周三到次周二,期望结果为 1 周
修复
实际结果为 6 天(不足 7 天),周数显示为 0

周差按完整 7 天计算,不满 7 天不进位。从周三到次周二只有 6 天,不是一自然周。

工作原理

公式推导 · 流程图解 · 依据出处

核心公式

ΔD = |D2 - D1|, ΔW = floor(ΔD / 7), ΔM = (Y2 - Y1) × 12 + (M2 - M1) - (D2 < D1 ? 1 : 0), ΔY = floor(ΔM / 12)

变量说明

  • D1, D2 — 起始和结束日期(公历)
  • ΔD — 两日期间的天数差(绝对值)
  • ΔW — 完整周数(向下取整)
  • ΔM — 完整月数(考虑日对齐)
  • ΔY — 完整年数(月差除以 12)
  • Y1, Y2, M1, M2 — 年份和月份数值

示例

计算 2023-03-15 到 2025-08-20 的差值。ΔD = 888 天(含闰年 2024 年 2 月 29 日)。ΔW = floor(888/7) = 126 周余 6 天。月差:Y2-Y1=2,M2-M1=5,D2≥D1,ΔM = 2×12+5 = 29 个月。年差:floor(29/12) = 2 年余 5 个月。结果:2 年 5 个月 5 天,或 29 个月,或 126 周,或 888 天。

适用范围

适用于公历日期(格里历),含闰年规则(1582 年后)。不适用于儒略历、农历或跨历法计算。月/年差采用日历月对齐法,非 30 天固定月,因此不同月份组合结果可能不同。

原理图

选择起始日期(年/月/日)选择结束日期(年/月/日)浏览器内计算(JavaScript)展示结果(天/周/月/年)输入验证(格式/范围/逻辑)日期差计算(时间戳差值)单位转换(天→周/月/年)结果格式化(含符号/单位)所有计算在浏览器本地完成,数据不会离开设备
用户输入 本地处理 输出结果 内部步骤

开发者集成

3 种主流语言 · 复制即用

from datetime import date

# 计算两个日期之间的天数差
start = date(2024, 1, 1)
end = date(2024, 12, 31)
delta = end - start
print(f"天数差: {delta.days}")  # 365

# 周数差(向下取整)
weeks = delta.days // 7
print(f"周数差: {weeks}")  # 52

# 月数差(近似,按30天/月)
months = delta.days // 30
print(f"月数差: {months}")  # 12

# 年数差(近似,按365天/年)
years = delta.days // 365
print(f"年数差: {years}")  # 1
package main

import (
	"fmt"
	"time"
)

func main() {
	start := time.Date(2024, 1, 1, 0, 0, 0, 0, time.UTC)
	end := time.Date(2024, 12, 31, 0, 0, 0, 0, time.UTC)

	days := int(end.Sub(start).Hours() / 24)
	weeks := days / 7
	months := days / 30
	years := days / 365

	fmt.Printf("天数差: %d\n", days)   // 365
	fmt.Printf("周数差: %d\n", weeks)  // 52
	fmt.Printf("月数差: %d\n", months) // 12
	fmt.Printf("年数差: %d\n", years)  // 1
}
// 计算两个日期之间的差值(天/周/月/年)
const start = new Date('2024-01-01');
const end = new Date('2024-12-31');

const msPerDay = 24 * 60 * 60 * 1000;
const days = Math.floor((end - start) / msPerDay);
const weeks = Math.floor(days / 7);
const months = Math.floor(days / 30);
const years = Math.floor(days / 365);

console.log(`天数差: ${days}`);   // 365
console.log(`周数差: ${weeks}`);  // 52
console.log(`月数差: ${months}`); // 12
console.log(`年数差: ${years}`);  // 1

常见问题

8 个高频疑问

这个日期差计算工具怎么用?
在页面上分别选择或输入起始日期和结束日期,工具会自动计算出两者之间的天数差。如果需要计算周数、月数或年数,可以点击对应的按钮切换显示。所有计算都在浏览器内完成,无需点击提交按钮,修改任意日期后结果会实时更新。支持的公历日期范围是 1900 年 1 月 1 日到 2099 年 12 月 31 日,超出这个范围可能无法正确处理。
为什么我算出来的天数和用手机日历数的不一样?
差异通常出在「是否包含起始日」的统计方式上。本工具采用「差值法」:即结束日期减去起始日期,不包含起始日当天。例如从 1 月 1 日到 1 月 2 日,结果为 1 天。如果你用手指数或日历数时把 1 月 1 日也算作第 1 天,就会多出 1 天。如果需要包含起始日(如计算借期天数),请在结果上手动加 1。
这个工具算的月数和年数准确吗?是按什么规则算的?
月数和年数按日历月/年边界计算,不是按 30 天或 365 天折算。例如 1 月 31 日到 2 月 28 日,月数结果为 0 个月(因为未跨越完整月份边界);1 月 1 日到 2 月 1 日结果为 1 个月。年数同理,按年份数字差值计算。这种算法适合计算合同期限、工龄等按「完整月份/年份」计的场景。如果需要按固定天数(如 30 天=1 月)计算,请参考天数结果自行折算。
计算结果显示为负数是什么意思?
负数表示起始日期晚于结束日期。例如起始选 2024-12-31、结束选 2024-01-01,结果会显示 -364 天。如果不需要负数,可以交换两个日期重新输入。部分场景(如计算距离某日期还有多少天)需要负数来区分「已过」和「未到」,但多数情况下建议保持起始日期早于结束日期以获得正数结果。
这个工具能算农历日期差吗?
不能。本工具只支持公历(阳历)日期计算。如果输入农历日期(如 腊月廿三、正月初一),工具会按公历解析导致结果错误。如果需要计算农历日期差,需先将农历转换为公历再输入。另外,工具也不支持时间(时分秒)的计算,只精确到天。
跨年、闰年、跨月的情况算得准吗?
准确。工具底层使用 JavaScript 的 Date 对象处理日期运算,该对象已内置公历的闰年规则(能被 4 整除但不能被 100 整除,除非能被 400 整除)和每月天数差异。例如 2024 年 2 月 29 日(闰年)到 2025 年 2 月 28 日,天数结果为 365 天;2023 年 2 月 28 日(平年)到 2024 年 2 月 28 日,天数结果为 366 天。跨月如 1 月 31 日到 2 月 28 日,天数结果为 28 天,符合日历实际天数。
工具会联网保存我的日期数据吗?隐私安全吗?
完全离线运行,不保存任何数据。所有日期计算都在你的浏览器本地完成,不会将任何日期信息发送到服务器。可以打开浏览器开发者工具的「网络」标签页验证:操作过程中没有任何 HTTP 请求发出。即使断开网络,工具依然能正常使用。关闭页面后,输入的所有日期立即从内存中清除。
为什么我只能选到 2099 年?能算更远的日期吗?
这是 JavaScript Date 对象的安全范围限制。虽然理论上 Date 支持到 275760 年,但超出 2099 年的日期在不同浏览器和操作系统上表现不一致(有些会返回 NaN 或错误结果)。为了保证结果可靠,工具将输入限制在 1900-2099 年。如果确实需要计算 2099 年以后的日期差,可以手动换算:例如用 2100-01-01 减去 2024-01-01,得到的天数再手动加上 2099 到 2100 的差值。
选择 打开 +新窗口 esc关闭