跳至主要内容

如何在 Excel 中计算两个日期之间的天数:5 种最佳方法

使用简单相减快速进行日期计算。应用 DAYS() 与 DATEDIF() 获得精确的日期区间。结合 NETWORKDAYS() 与 TODAY() 跟踪工作日,并自动排除周末与节假日。
· 5分钟 阅读

使用 AI 探索

在本文中,我将带您了解一些处理日期的实用方法。我们将从简单的减法到 NETWORKDAYS() 和 DATEDIF() 等高级函数一一讲解。读完之后,您将学会如何计算日期之间的天数、统计工作日,甚至处理如跳过周末或节假日等特定场景。不过,如果您是 Excel 新手,不妨先看看我们的 Introduction to Excel 课程,打好基础。 

了解 Excel 的日期系统

首先,简要介绍一下 Excel 的日期系统。最重要的是要知道,Excel 将每个日期都存储为唯一的数字。例如,1900 年 1 月 1 日对应数字 1,1900 年 1 月 2 日对应数字 2,依此类推。

为避免讲得过于复杂,我再补充两点。其一,Excel 实际上有两套系统:1900 系统和 1904 系统。1900 系统以 1900 年 1 月 1 日为第 1 天,1904 系统以 1904 年 1 月 1 日为第 0 天。两者的差异为 1,462 天,约合 4 年再加 1 个闰日。其二,日期格式也会因地区而异。例如 02/03/2025 可能表示 2 月 3 日,也可能表示 3 月 2 日,取决于所在地区。如果我们在日期格式上不一致,Excel 可能会误解数据并产生错误结果。

如果您只是计算日期之间的天数,这些问题一般不会直接影响结果,但了解它们仍然有益。想要系统提升,可学习我们的 Excel Fundamentals 学习路径,成为真正的高手。

如何在 Excel 中查找两个日期之间的天数

在 Excel 中有几种不同的方法可以计算日期之间的天数,它们在功能上大致相同。我会逐一演示,您可以选择自己最喜欢的一种。

方法一:简单相减

最简单快捷的方法之一就是相减。它用一个日期减去另一个日期。其语法为:

New date - Old date

这里,我的数据集中,日期位于 A2 和 B2 单元格,在 C2 中输入以下公式:

=B2-A2

在 Excel 中使用相减方法查找两个日期之间的天数

使用相减方法计算日期差。图片来源:作者。

方法二:DAYS() 函数

另一种我常用的方法是专门为此设计的 DAYS() 函数。其语法为:

=DAYS(end_date, start_date)

在 C2 单元格中,我输入以下公式:

=DAYS(B2,A2)

与相减类似,如果结束日期晚于开始日期,结果为正;如果早于开始日期,结果为负。

在 Excel 中使用 DAYS() 函数查找两个日期之间的天数

使用 DAYS() 函数计算日期差。图片来源:作者。

方法三:DATEDIF() 函数

与 DAYS() 类似,DATEDIF() 也用于日期相减,但参数顺序相反。其语法为: 

=DATEDIF(start_date, end_date, "d"))

第三个参数用于指定时间单位。例如,d 表示天,y 表示年,m 表示月。

在 C2 单元格中,我输入了以下公式:

=DATEDIF(A2, B2, "d")

不过在我按下 Enter 后,第 3 行出现了 #NUM! 错误。原因是公式试图用较新的日期(end_date)减去较早的日期(start_date),而 DATEDIF() 不允许这样做。所以,尽管 DATEDIF() 在支持不同时间单位方面更灵活,但它也更受限,因为它不会返回负值。

另外需要注意,DATEDIF() 是隐藏函数,Excel 在输入时不会自动提示。这意味着使用该函数需要手动完整输入。

在 Excel 中使用 DATEDIF() 函数查找两个日期之间的天数

使用 DATEDIF() 函数计算日期差。图片来源:作者。

方法四:NETWORKDAYS() 与 NETWORKDAYS.INTL() 函数

NETWORKDAYS() 和 NETWORKDAYS.INTL() 专用于计算工作日,自动排除周末和节假日。假设您想统计两个日期之间的工作日,并排除周末,此时可以使用 NETWORKDAYS() 来自动跳过周六与周日。其语法为: 

NETWORKDAYS(start_date, end_date, [holidays])

例如,如果我不指定节假日,它只会排除周末。在 C2 中输入以下公式:

=NETWORKDAYS(A2,B2)

它将返回 A2 与 B2 之间的工作日数,不包含周末。

在 Excel 中使用 NETWORKDAYS() 函数计算两个日期之间的工作日 使用 NETWORKDAYS() 计算日期差(工作日)。图片来源:作者。

如果我还想排除节假日,我会将这些日期单独列在 E2 到 E5,然后在第三个参数中引用该区域:

=NETWORKDAYS(A2,B2,$E$3:$E$4)

现在,它会计算工作日,并同时排除周末和我列出的节假日。这能更轻松地得到准确的工作日统计。

在 Excel 中使用 NETWORKDAYS() 计算两个日期之间的天数并排除节假日

使用 NETWORKDAYS() 函数。图片来源:作者。

有时,我的周末并非默认的周六和周日。这种情况下,我会使用 NETWORKDAYS.INTL(),它允许自定义周末。其语法为:

NETWORKDAYS.INTL(start_date, end_date, [weekend], [holidays])

对于 weekend 参数,我可以使用数字选择预设周末(如 1 表示周六-周日,7 表示周五-周六),也可以使用自定义文本串如 0000011,其中每一位代表一周中的一天(从星期一开始),1 表示周末,0 表示工作日。

假设我的周末是周五和周六,我会使用如下公式:

=NETWORKDAYS.INTL(A2, B2, 7, $E$2:$E$3)

在 Excel 中使用 NETWORKDAYS.INTL() 计算两个日期之间的工作日使用 NETWORKDAYS.INTL() 计算日期差(工作日)。图片来源:作者。

方法五:TODAY() 函数

如果我想计算自某个日期以来已过多少天,或距离某个未来日期还有多少天,我通常会使用 TODAY() 函数。该函数返回当前日期,因此无需每天手动更新。其语法为: 

=TODAY() - past_date

假设过去的日期在 A3,那么我在 B3 中输入:

=TODAY()-A3

在 Excel 中使用 TODAY() 函数计算自某日期以来的天数

使用 TODAY() 计算自某日期以来的天数。图片来源:作者。

如果我需要知道距离未来日期还有多少天,只需将公式对调:

=Future_date - TODAY()

也就是: 

=A3 - TODAY()

在 Excel 中使用 TODAY() 函数计算距离未来日期还有多少天

使用 TODAY() 计算距离指定日期的剩余天数。图片来源:作者。

我的看法:各函数的快速对比 

方法我喜欢的点我不喜欢的点
简单相减快速易用不考虑周末或节假日
DAYS()语法清晰、结构化仅适用于天数
DATEDIF()可按天、月、年灵活计算结果为负时会报错

NETWORKDAYS()

NETWORKDAYS.INTL()

可排除周末与节假日节假日需要额外设置
TODAY()每日自动更新仅适用于涉及当天的计算

进阶技巧

除了基础用法,如果您需要处理复杂场景,下面这些进阶技巧可供参考: 

处理负值

当日期先后顺序相反时,会得到负值。为避免这种情况,我会将 DAYS() 函数包在 ABS() 中,如下:

=ABS(DAYS(B2,A2))

如下图所示: 

在 Excel 中处理负的日期差值

使用 ABS() 处理负值。图片来源:作者。

错误处理

以下是我遇到过的常见 Excel 日期错误及其解决方法。

  • #VALUE! 错误:当我的系统日期格式为 mm/dd/yyyy,但公式中使用了 dd/mm/yyyy 时会出现。我通过将公式中的日期更新为与系统格式一致来修复。

  • #NUM! 错误:使用 DAYS() 函数时,如果某个日期的数值超出有效范围,会出现该错误。为避免此问题,请确保数值在有效日期范围内。 

  • #NAME? 错误:通常是拼写错误(将 DATEDIF() 误写成 DATEIF())。为避免此类问题,请仔细检查拼写。

组合函数

有时单个日期函数不足以应对复杂任务,我会组合多个函数,构建可应对不同场景的动态公式。

例如,我想计算距离考试还有多少个上学日。我会使用 NETWORKDAYS() 统计工作日,并结合 IFERROR() 处理无效日期。此时,公式如下: 

=IFERROR(NETWORKDAYS(TODAY(), A2, $B$3:$B$4), "Check Dates")

在 Excel 中将 IFERROR 与 NETWORKDAYS() 和 TODAY() 结合,计算距离考试还有多少天

将 IFERROR() 与 NETWORKDAYS 结合使用。图片来源:作者。 

何时需要在 Excel 中计算两个日期之间的天数

下面分享几个我近期在项目中使用这些函数的真实案例。

计算年龄 

我拿到一份日期清单,需要根据出生日期计算个人年龄。为此,我使用了 DATEDIF() 函数。您可以在下方看到示例数据集。在 B2 中,我输入:

=DATEDIF(A2,TODAY(),"Y")

该公式会计算 A2(出生日期)到今天之间的完整年份。

在 Excel 中使用 IF() 和 TODAY() 函数计算年龄

使用 DATEDIF() 计算年龄。图片来源:作者。

如果我需要更具体的明细,比如总月数或总天数,可以这样调整参数:

  • m 表示自出生以来的月数。

  • d 表示天数。

项目时间线跟踪

我也会使用 NETWORKDAYS() 跟踪项目剩余工作日。为此,我将开始与结束日期输入在 A2 和 B2,并在 C2:C5 列出节假日。随后在 D2 中输入以下公式来计算项目工作日:

=NETWORKDAYS(A2,B2,$C$3:$C$5)

在 Excel 中使用 NETWORKDAYS() 函数统计项目剩余工作日

使用 NETWORKDAYS() 统计项目剩余天数。图片来源:作者。

每当项目时间线有变动,我只需更新日期,公式会自动调整。这样我就能轻松跟踪截止期限。

财务分析

有一次我需要跟踪多份合同的截止日期。我在 Excel 中搭建了一个简单的系统,方便识别合同是否已过期或仍然有效。

我只需在 C2 中输入如下公式:

=IF(B2 < TODAY(), "Expired", "Active")

它会根据到期日是否已过期自动为每份合同打上标签。

我还使用条件格式根据状态为单元格着色以便更清晰。Active(有效)以绿色高亮,Expired(过期)以红色标注。 

具体做法是,在 Conditional Formatting 中选择 New Rule ,并选择 Use a formula to determine which cells to format。然后分别输入公式 =B2="Expired" 和 =B2="Active"。这样我就能一目了然地识别需要关注的合同。

在 Excel 中检查合同截止日期今天是否有效或过期

跟踪合同截止日期。图片来源:作者。

现在,一切都能自动更新。每当我新增合同或修改到期日,公式都会即时调整。

药物续配间隔

也可以在 Excel 中计算处方续配的间隔。例如,您的父母在 2025 年 1 月 1 日取了 30 天的药,今天是 2025 年 2 月 5 日,您想知道他们有多长时间没有服药。

在下方数据集中,单元格 A2 显示上次取药日期。我们只需用今天减去该日期并加上 30。(这只是用于练习 Excel 函数的示例,医疗问题请咨询医生。)

=TODAY()-(A3+30)

在 Excel 中使用 TODAY() 函数计算药物续配间隔

查找上次药物续配时间。图片来源:作者

通过这种方式,我可以轻松跟踪每次续配后的天数,并合理安排下一次续配。

技巧与最佳实践

下面是一些能帮助您的小技巧与最佳实践:

  • 我总是先确保日期单元格的格式正确。否则,Excel 可能无法将其识别为日期,从而影响计算结果。所以,我会在 Home 选项卡的 Name 组中将其设置为 Date 格式。

  • 我会让公式保持简洁清晰。与其在公式中硬编码日期(如 =DAYS("1/10/2025", "1/1/2025")),我更倾向于使用单元格引用,诸如 A2 和 B2。这样当我需要更新日期时,只需更改单元格值,无需修改公式。

  • 在使用 TODAY() 函数时,我会确保将单元格格式设置为 Number,否则可能会显示 #### 错误或不正确的日期。

结语

本文介绍了在 Excel 中处理日期的一些最佳方法,从简单相减到 DAYS()、DATEDIF()、NETWORKDAYS() 和 TODAY() 等高级函数。这些函数非常适合用于跟踪时间线与管理节假日。

要熟练掌握它们,最佳方式就是练习。在您自己的表格中试一试,看看它们如何简化您的工作。

如果您准备进一步提升技能,推荐学习 Data Analysis in Excel、Data Preparation in Excel 和 Data Visualization in Excel 课程。这些课程涵盖更高级的功能与策略,能让您的工作更高效。 

Laiba Siddiqui

作者

Laiba Siddiqui

我是内容策略专家,热衷于将复杂主题化繁为简。我曾帮助 Splunk、Hackernoon 和 Tiiny Host 等公司为其受众打造兼具吸引力与信息量的内容。

常见问题

如何分别以小时、分钟和秒计算两个时间的差,并忽略其他单位?

您可以使用以下公式:

  • 小时:=HOUR(B2-A2)

  • 分钟:=MINUTE(B2-A2)

  • 秒:=SECOND(B2-A2)

注意:结果不会超过 24 小时或 60 分钟/秒。

如何在 Excel 中计算两个时间之间的小时数?

若要计算带小数的小时数,使用 =(B2-A2)*24;若要获取完整小时数,使用 =INT((B2-A2)*24)。

在 Excel 中快速插入当前日期或时间的键盘快捷键是什么?

操作步骤如下:

  • 按下 Ctrl + ; 可插入当前日期。
  • 按下 Ctrl + Shift + ; 可插入当前时间。
如何计算两个日期之间的周数?

要计算两个日期之间的周数,可将天数除以 7。可使用以下公式:= (End_Date - Start_Date) / 7.

主题