Menu

Excel 计算两个日期相差天数:减法、DAYS 与 DATEDIF

=B2-A2 返回 A2 中的日期到 B2 中较晚日期之间相差的天数。本文讲解用 DAYS 计算天数、首尾两天都算在内,以及改为计算周数、月数、年数或工作日。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=B2-A2 返回 A2 中的日期到 B2 中较晚日期之间相差的天数。Excel 把每个日期都存储为一个整数天数(2026-03-15 就是 46096),所以两个日期相减,得到的就是中间相隔的天数。

从下单到送达的天数
C2
ABC
1OrderedDeliveredDays
22026-03-022026-03-097
32026-03-052026-03-072
42026-03-102026-04-0223
52026-03-282026-04-036
62026-12-292027-01-046
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

这几笔订单分别用了 7、2、23、6 和 6 天。减法会自动处理跨月和跨年:最后一笔订单跨过了元旦,算出来仍然是 6 天。改一下送达日期,天数会跟着变。如果较早的日期在 B 列,结果就是负数:-7 而不是 7。

DAYS 函数

=DAYS(end_date, start_date) 做的是同样的减法,只是结束日期写在前面。它的结果和 =B2-A2 完全一样;选择它的主要理由是函数名能直接说明公式在做什么。

减法与 DAYS
D2
ABCD
1StartEndB2-A2DAYS
22026-01-152026-03-105454
32026-02-012026-03-012828
42024-02-012024-03-012929
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

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。

晚数与天数
D2
ABCD
1FromToNightsDays (both counted)
22026-07-062026-07-1045
32026-07-312026-08-0112
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

单独一天,从 2026-07-06 到 2026-07-06,用减法算是 0,加上 +1 就是 1。日期表格里大多数“差一”错误都出在这里,所以填充整列之前,先想清楚你要的是哪一种。

两个日期之间的周数、月数和年数

把天数除以 7 就是周数。月和年的天数并不固定,所以要用 DATEDIF,它计算的是完整的日历月和日历年。

周数、月数和年数
D2
ABCDEF
1StartEndWeeksFull weeksMonthsYears
22025-06-152026-09-3067.467151
32024-01-012026-01-01104.4104242
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

从 2025-06-15 到 2026-09-30 是 67.4 周,即 67 个整周、15 个整月和 1 个整年。DATEDIF 要求较早的日期写在前面,顺序反过来会返回 #NUM!。

两个日期之间的工作日

如果只算周一到周五,就用 NETWORKDAYS(start, end)。开始日期和结束日期如果是工作日,都会被算进去;它还可以用第三个参数跳过一组节假日。NETWORKDAYS 和 WORKDAY 讲解了节假日和其他周末设置。

日历天数与工作日
D2
ABCD
1StartEndCalendar daysWorking days
22026-03-022026-03-131210
32026-03-062026-03-0942
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

2026 年 3 月 2 日到 3 月 13 日,首尾都算是 12 天,其中 10 天是工作日。从周五到下周一是 4 天,其中 2 个工作日。

练习:送货时长

轮到你了
C2
ABC
1OrderedDeliveredDays
22026-05-182026-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) 得到整周数。

Coddy 编程语言插图

和 Coddy 一起学编程

开始