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 页的合同签订日期为例操作。
- 在 A2 单元格输入开始日期,例如签订日期,并确认它在单元格中右对齐。
- 选中 B2 单元格,输入 =TODAY()-A2。
- 按回车,查看 B2 的结果。如果显示为日期样式,选中 B2,把单元格格式改为常规或数值。
- 检查结果是否为你预期的整数天数,例如开始日期是昨天,结果应为 1。
- 向下拖动 B2 右下角的填充柄,把公式复制到其他行。
- 如果 A 列有空白行,把公式改为 =IF(A2="","",TODAY()-A2),空行就会留空,不会显示一个很大的数字。
- 需要按年、月、天拆分时,在 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。


