=B2-A2 返回 A2 中的日期到 B2 中较晚日期之间相差的天数。Excel 把每个日期都存储为一个整数天数(2026-03-15 就是 46096),所以两个日期相减,得到的就是中间相隔的天数。
| A | B | C | |
|---|---|---|---|
| 1 | Ordered | Delivered | Days |
| 2 | 2026-03-02 | 2026-03-09 | 7 |
| 3 | 2026-03-05 | 2026-03-07 | 2 |
| 4 | 2026-03-10 | 2026-04-02 | 23 |
| 5 | 2026-03-28 | 2026-04-03 | 6 |
| 6 | 2026-12-29 | 2027-01-04 | 6 |
这几笔订单分别用了 7、2、23、6 和 6 天。减法会自动处理跨月和跨年:最后一笔订单跨过了元旦,算出来仍然是 6 天。改一下送达日期,天数会跟着变。如果较早的日期在 B 列,结果就是负数:-7 而不是 7。
DAYS 函数
=DAYS(end_date, start_date) 做的是同样的减法,只是结束日期写在前面。它的结果和 =B2-A2 完全一样;选择它的主要理由是函数名能直接说明公式在做什么。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | B2-A2 | DAYS |
| 2 | 2026-01-15 | 2026-03-10 | 54 | 54 |
| 3 | 2026-02-01 | 2026-03-01 | 28 | 28 |
| 4 | 2024-02-01 | 2024-03-01 | 29 | 29 |
2026 年 2 月有 28 天,2024 年 2 月有 29 天:Excel 了解日历,闰年也包括在内。注意参数顺序:=DAYS(A2,B2) 在第一行会返回 -54。DAYS 需要 Excel 2013 或更高版本;减法在任何版本中都能用。
包含开始日期和结束日期的天数
减法计算的是两个日期之间的天数,也就是过了几个晚上。从 7 月 6 日订到 7 月 10 日的酒店是 4 晚,但从 7 月 6 日租到 7 月 10 日的车要付 5 天的钱。第一天和最后一天都要算时,再加 1。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | From | To | Nights | Days (both counted) |
| 2 | 2026-07-06 | 2026-07-10 | 4 | 5 |
| 3 | 2026-07-31 | 2026-08-01 | 1 | 2 |
单独一天,从 2026-07-06 到 2026-07-06,用减法算是 0,加上 +1 就是 1。日期表格里大多数“差一”错误都出在这里,所以填充整列之前,先想清楚你要的是哪一种。
两个日期之间的周数、月数和年数
把天数除以 7 就是周数。月和年的天数并不固定,所以要用 DATEDIF,它计算的是完整的日历月和日历年。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Start | End | Weeks | Full weeks | Months | Years |
| 2 | 2025-06-15 | 2026-09-30 | 67.4 | 67 | 15 | 1 |
| 3 | 2024-01-01 | 2026-01-01 | 104.4 | 104 | 24 | 2 |
从 2025-06-15 到 2026-09-30 是 67.4 周,即 67 个整周、15 个整月和 1 个整年。DATEDIF 要求较早的日期写在前面,顺序反过来会返回 #NUM!。
两个日期之间的工作日
如果只算周一到周五,就用 NETWORKDAYS(start, end)。开始日期和结束日期如果是工作日,都会被算进去;它还可以用第三个参数跳过一组节假日。NETWORKDAYS 和 WORKDAY 讲解了节假日和其他周末设置。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | End | Calendar days | Working days |
| 2 | 2026-03-02 | 2026-03-13 | 12 | 10 |
| 3 | 2026-03-06 | 2026-03-09 | 4 | 2 |
2026 年 3 月 2 日到 3 月 13 日,首尾都算是 12 天,其中 10 天是工作日。从周五到下周一是 4 天,其中 2 个工作日。
练习:送货时长
| A | B | C | |
|---|---|---|---|
| 1 | Ordered | Delivered | Days |
| 2 | 2026-05-18 | 2026-05-27 |
轮到你了: 在 C2 中计算这笔订单用了多少天,从 A2 中的下单日期算到 B2 中的送达日期。
结果显示成日期或 #### 的原因
日期相减时,经常遇到两种显示问题:
- 结果看起来像日期(
1900-01-07,美国区域设置下显示为1/7/1900)。单元格保留了日期格式,于是 7 天被显示成了 Excel 日历中的第 7 天。选中这些单元格,选择“开始 > 数字格式 > 常规”。 - 单元格里全是
#####。 结果是负数(两个日期顺序反了),而单元格是日期格式,日期不能是负数。把日期对调、改用=ABS(B2-A2),或者把单元格设为“常规”格式来查看这个负数。
如果结果是 #VALUE!,说明某个单元格里是看起来像日期的文本,比如在设置为美国日期格式的 Excel 中输入的 15.03.2026。用 =ISNUMBER(A2) 检查一下:真正的日期会返回 TRUE。
常见问题
怎样在 Excel 中计算两个日期之间相差的天数?
用较晚的日期减去较早的日期:=B2-A2。Excel 把日期存储为天数,所以相减的结果就是两者相差的天数。=DAYS(B2,A2) 的结果相同。
怎样把开始日期和结束日期都算进天数?
再加 1:=B2-A2+1。从 7 月 6 日到 7 月 10 日,相减得 4 天(住酒店的晚数),首尾都算则是 5 天(租车的天数)。
怎样在 Excel 中计算两个日期之间相差的月数?
=DATEDIF(A2,B2,"M") 计算整月数。年数则用 "Y"。DATEDIF 要求较早的日期写在前面。
DAYS 函数和日期直接相减有什么区别?
结果没有区别:=DAYS(B2,A2) 和 =B2-A2 返回的天数相同。DAYS 把结束日期写在前面,并且需要 Excel 2013 或更高版本;减法在所有版本中都能用。
怎样在 Excel 中计算两个日期之间相差的周数?
把天数除以 7:=(B2-A2)/7 得到带小数的周数,=INT((B2-A2)/7) 得到整周数。