两日期相差
起始日期时间
结束日期时间
两日期间天/周/月/年差
起始日期时间
结束日期时间
· "工作日" = 总天数 − 周末(六/日)− 法定节假日 + 调休补班
· "月数 / 年数" 按日历月份计算,不是 30 / 365 天近似
· 跨闰年自动处理 2 月 29 日
了解工具定位 · 使用场景 · 对比优势
计算两个日期之间相隔多少天、周、月或年。项目管理排工期、合同算履约天数、人事核入职时长、财务对账算账期,直接输入起止日期即可。所有计算在浏览器内完成,日期数据不上传服务器。
项目经理需要精确计算两个里程碑之间的工作日数(排除周末和法定假日),以排定开发、测试、上线各阶段的时间表。使用本工具输入起止日期,直接获得精确的天数差,比手动翻日历更高效,避免因日期计算错误导致项目延期或资源错配。
个人借贷中,按日计息的利息计算依赖准确的借款天数。借款人输入放款日和还款日,本工具精确算出实际占用天数,再结合约定的日利率即可快速核对利息总额。这比估算或按整月计算更公平,避免因天数分歧产生纠纷。
教务人员或学生本人需要确认从入学到毕业的实际在校月数或学年数,以判断是否符合毕业资格或升学条件。本工具直接输出月差和年差,结果精确到小数点后一位,比手动计算月份差更准确,避免因月份起止点理解不同导致误判。
租赁合同或服务协议到期前,需要提前计算剩余天数以安排续签或终止流程。输入合同起始日和到期日,本工具直接给出剩余天数,并可换算成周数,方便设置多个时间节点的提醒(如提前 30 天、15 天),避免因遗忘导致自动续约或违约损失。
装修业主与施工方约定工期时,需要明确从开工到完工的总天数,并拆解为多个阶段(水电、泥瓦、木工等)。使用本工具输入开工日和计划完工日,快速得到总工期天数,再按比例分配各阶段时长,确保进度可控,避免口头约定的模糊天数引发扯皮。
| 维度 | 本工具 | 日期计算器 (timeanddate.com) | 手动计算 |
|---|---|---|---|
| 数据隐私 | 纯浏览器,零上传 | 上传到服务器处理 | 完全本地,无数据外泄风险 |
| 处理速度 | 1 秒内 | 1-3 秒(含网络延迟) | 数分钟至数小时(视日期跨度) |
| 离线可用 | 完全支持 | 不支持 | 完全支持 |
| 计算范围 | 公历日期,无年份限制 | 公历日期,支持公元 1 年至 9999 年 | 取决于个人知识,无理论限制 |
| 结果单位 | 天、周、月、年(含小数) | 天、周、月、年(含小数),支持工作日 | 通常仅天或月 |
| 注册要求 | 无需注册 | 无需注册 | 无需注册 |
| 收费 | 免费 | 免费 | 免费 |
上手步骤 · 输入输出 · 避坑提示
| 输入 | 输出 | 说明 |
|---|---|---|
| 2024-01-01 至 2024-01-10 | 9 天 | 典型场景:同月内日期差 |
| 2023-12-25 至 2024-01-05 | 11 天 | 典型场景:跨年日期差 |
| 2024-01-01 至 2024-12-31 | 365 天 | 52 周 1 天 | 12 个月 | 1 年 | 典型场景:整年跨度,含闰年 |
| 2024-02-28 至 2024-03-01 | 2 天 | 边界 case:闰年 2 月 29 日前后 |
| 2024-01-01 至 2024-01-01 | 0 天 | 边界 case:起止日期相同 |
| 2024-01-10 至 2024-01-01 | 9 天 | 易错 case:起始日期晚于结束日期 |
| 2024-01-01 至 2024-01-32 | 错误:日期不合法 | 易错 case:用户输入无效日期 |
开始:2025-01-01,结束:2024-12-25开始:2024-12-25,结束:2025-01-01日期差计算默认按「结束 - 开始」顺序。如果结束日期早于开始日期,结果会显示负值,不符合多数用户预期。
从 1 月 31 日到 2 月 28 日,期望结果为「1 个月」理解该结果为「0 个月 28 天」或「28 天」月份差算法通常以「同一天」为基准(1/31→2/28 不足一个月),不会自动按「月底对齐」补足天数。
2020-02-29 到 2021-02-28,认为刚好 1 年实际结果为 364 天或 0 年 364 天2020 是闰年有 2/29,2021 是平年无 2/29,从 2/29 到次年 2/28 不足一整年。
2025/01/01 和 2025-01-01 混用统一使用 2025-01-01 或 2025/01/01工具对输入格式敏感,混用斜杠和连字符可能导致解析错误或意外结果。建议统一为 ISO 8601 格式。
输入 2025-01-01 08:00:00 和 2025-01-02 20:00:00输入 2025-01-01 和 2025-01-02本工具只计算日期差,忽略具体时间。带时间输入会被截断至 00:00:00,结果可能比预期少 1 天。
UTC+8 用户输入「2025-01-01」但浏览器时区设为 UTC-5确认浏览器时区与本地时区一致后再输入工具使用浏览器本地时区解析日期。如果时区设置错误,同一字符串可能被解释为前一日或后一日。
从周三到次周二,期望结果为 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 天固定月,因此不同月份组合结果可能不同。
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}") # 1package 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}`); // 18 个高频疑问