Excel公式怎么计算两个日期之间的天数

说明在Excel里用日期相减和TODAY函数算过去到现在的天数,讲清结果显示不对、文本日期、负数和空白行等常见问题的处理方法。

很多人在 Excel 里记录合同签订日、借款日或项目开始日,想知道"已经过去了多少天"。直接的想法是拿今天的日期减去那一天,但真正动手时常会遇到结果显示成日期、出现 #VALUE! 错误,或者天数每天都在变的情况。

这篇文章写给需要在表格里统计日期间隔的人。读完后,你能用一两个公式算出任意一个过去日期到今天的天数,也能判断什么时候该用日期相减、什么时候该用 TODAY、DATEDIF 或 NETWORKDAYS,并知道结果出错时该检查哪里。

Excel 公式怎么算过去到现在的天数?一句话结论

在空白单元格输入 =TODAY()-开始日期,回车即可得到天数,再把结果单元格的格式改为常规或数值。下面的表格列出常见情况对应的做法。

你的情况推荐做法原因
两个固定日期,只想知道相隔几天=结束日期-开始日期结果固定,不受打开日期影响
从过去某天算到今天,要随时更新=TODAY()-开始日期TODAY 返回当天日期,每次重算都会变化
需要精确到小时或分钟=NOW()-开始时间NOW 包含时间部分,结果是小数天数
要算成几年几个月零几天=DATEDIF(开始日期,TODAY(),"y") 等DATEDIF 可分别返回整年、整月、剩余天数
只统计工作日,不含周末=NETWORKDAYS(开始日期,TODAY())自动排除周六和周日,可再指定节假日

开始之前:先确认这几点

动手前先检查下面几项,能避免大部分错误结果。

  • 单元格里的内容是不是真正的日期。 Excel 中日期本质是数值,通常在单元格内右对齐;如果是左对齐,多半是文本,文本无法直接参与减法。例如"2024.3.1"看起来像日期,但 Excel 可能当作文字处理。
  • 日期的显示格式不影响计算。 同一个日期可以显示为"2024/3/1",也可以显示为"45352",计算结果一样。显示成数字,只说明格式被设成了常规,不说明公式有错。
  • TODAY 是会变化的。 它每次打开或重算时都返回当天日期,所以同一个公式今天和明天的结果不同。如果需要保存某一天的天数,复制结果后用"选择性粘贴为数值"固定下来。
  • TODAY 不含时间,NOW 含时间。 只想按整天计数时用 TODAY;需要精确到当天的几点几分时才用 NOW。
  • 确认开始日期早于结束日期。 开始日期晚于今天时,相减结果为负数;DATEDIF 在开始日期晚于结束日期时会返回错误。

在 Excel 里计算某个日期到今天的天数的步骤

假设 A 列是日期,B 列用来显示天数。下面以一份 12 页的合同签订日期为例操作。

  1. 在 A2 单元格输入开始日期,例如签订日期,并确认它在单元格中右对齐。
  2. 选中 B2 单元格,输入 =TODAY()-A2。
  3. 按回车,查看 B2 的结果。如果显示为日期样式,选中 B2,把单元格格式改为常规或数值。
  4. 检查结果是否为你预期的整数天数,例如开始日期是昨天,结果应为 1。
  5. 向下拖动 B2 右下角的填充柄,把公式复制到其他行。
  6. 如果 A 列有空白行,把公式改为 =IF(A2="","",TODAY()-A2),空行就会留空,不会显示一个很大的数字。
  7. 需要按年、月、天拆分时,在 C2 输入 =DATEDIF(A2,TODAY(),"y") 得到整年数,再用 "ym" 得到剩余月数,用 "md" 得到剩余天数。

做完后逐项核对

公式写好后,建议抽几行手动验证,再交给别人使用。

检查项怎么看有问题怎么办
天数是否为整数结果中是否出现小数如果含时间,改用 =INT(TODAY()-A2) 取整
结果是否显示成日期单元格是否为日期样式或序列号把单元格格式改为常规或数值
结果是否为负数开始日期是否晚于结束日期检查日期录入顺序,或改用 ABS 函数把负值转为正数
是否出现 #VALUE!日期是否左对齐、是否为文本用 DATEVALUE 转换,或重新输入为标准日期
空行是否显示天数空白行的结果是否为一个很大的数用 IF 判断空白后再计算

📊 核心对比

三类常用计算方式各有适用场景,下表可帮助你快速选择。

方式写法示例结果形式适合场景
日期相减=B2-A2整数天数两个固定日期之间的间隔
TODAY 相减=TODAY()-A2整数天数,每天变化从过去某天到今天的累计天数
DATEDIF=DATEDIF(A2,TODAY(),"y")整年、整月或剩余天数合同期限、工龄、年龄等需要拆分的场景

❓ 常见问题(FAQ)

1. 为什么我的日期减法结果显示成一串日期?

这是单元格格式的问题。Excel 对日期相减结果有时会套用日期格式,把单元格改为常规或数值后就会显示天数。

2. DATEDIF 函数在函数列表里找不到,还能用吗?

可以。DATEDIF 是 Excel 保留的兼容函数,自动补全列表中不一定出现,但直接手动输入公式即可使用。

3. 怎么只算工作日,不算周末?

使用 NETWORKDAYS 函数,例如 =NETWORKDAYS(A2,TODAY())。它会排除周六和周日,并包含开始和结束两天;如果有节假日,可以把节假日日期列表作为第三个参数加入。

4. 为什么昨天算好的天数,今天打开变了?

因为公式里用了 TODAY,它每天返回的日期都不同。需要固定结果时,把公式结果复制后粘贴为数值。

📝 总结

在 Excel 里算过去到现在的天数,常用的是 =TODAY()-开始日期,结果出错时先检查日期是否为文本、单元格格式是否正确。需要按年月拆分或只算工作日,再改用 DATEDIF 或 NETWORKDAYS。

打开 OmniDoc,处理你的表格文件

更新于 2026-11-04