分享免费的编程资源和教程

网站首页 > 技术教程 正文

Excel 日期函数看似复杂,但只要理解其核心逻辑,就能轻松掌握。

goqiw 2025-08-06 19:35:52 技术教程 8 ℃ 0 评论

Excel 日期函数看似复杂,但只要理解其核心逻辑,就能轻松掌握。这份指南专为新人设计,从基础概念到实用技巧,手把手带你玩转日期计算。


核心理念:Excel 把日期当数字处理!这是新人最需要理解的关键点!

序列值: Excel 内部将日期存储为整数(称为序列值),代表自 1900 年 1 月 1 日(Windows 系统默认)或 1904 年 1 月 1 日(Mac 系统早期默认,可选)以来的天数。

例如:2023 年 10 月 27 日 在 Windows Excel 中大约是 45222(具体数值取决于你的系统日期)。

时间: 时间被视为一天中的小数部分。例如,中午 12:00 PM0.5,因为它是半天。

显示格式: 单元格格式决定了数字如何显示成我们熟悉的日期或时间(如 “2023/10/27”, “10:30 AM”)。

查看序列值:

在一个单元格输入 =TODAY()=NOW()

选中该单元格。

Ctrl + 1 打开“设置单元格格式”对话框。

选择“常规”格式,点击“确定”。你会看到一个数字(如 45222.xxxx),这就是该日期/时间的序列值。

再按 Ctrl + 1,选择回你需要的日期格式即可恢复显示。


一、最常用核心日期函数详解与实操


TODAY() - 获取今天日期

功能: 返回当前系统日期(不含时间)。每次打开工作簿或工作表重新计算时自动更新。

语法: =TODAY()

参数:

实操:

在单元格 A1 输入 =TODAY(),回车。显示今天的日期(如 2023-10-27)。

明天打开文件,A1 会自动变成明天的日期。


NOW() - 获取当前日期和时间

功能: 返回当前系统日期和时间。每次打开工作簿或工作表重新计算时自动更新。

语法: =NOW()

参数:

实操:

在单元格 A2 输入 =NOW(),回车。显示当前的日期和时间(如 2023-10-27 14:30:15)。

F9 键(强制重新计算工作表),时间部分会更新。


DATE(year, month, day) - 构造指定日期

功能: 将给定的年、月、日数字组合成一个有效的日期序列值。

语法: =DATE(年份, 月份, 日)

参数:

year:年份数字(1900-9999)。可以用负数或大于 9999 的数字,但结果可能不符合预期。

month:月份数字(1-12)。可以大于 12 或小于 1,Excel 会自动推算。例如:

DATE(2023, 13, 1) 返回 2024 年 1 月 1 日

DATE(2023, 0, 15) 返回 2022 年 12 月 15 日

DATE(2023, -1, 10) 返回 2022 年 11 月 10 日

day:日数字(1-31)。可以大于该月的天数或小于 1,Excel 会自动推算到相应月份。例如:

DATE(2023, 2, 30) 返回 2023 年 3 月 2 日(因为 2023 年 2 月只有 28 天)

DATE(2023, 5, 0) 返回 2023 年 4 月 30 日

DATE(2023, 6, -5) 返回 2023 年 5 月 26 日

实操:

在单元格 B1 输入 2023,B2 输入 10,B3 输入 27

在 B4 输入 =DATE(B1, B2, B3),回车。显示 2023-10-27

尝试修改 B2 为 15,B4 自动变成 2024-3-27(因为 15 个月=1 年 3 个月)。

尝试修改 B3 为 35,B4 自动变成 2023-11-4(10 月 31 天,35-31=4 天进入 11 月)。


DATEDIF(start_date, end_date, unit) - 计算两个日期之间的差值 (隐藏但超实用!)

功能: 计算两个日期之间相差的年、月或天数。注意: 此函数在函数列表和 Excel 帮助中可能找不到,但可以直接使用,兼容性好。

语法: =DATEDIF(开始日期, 结束日期, "单位代码")

参数:

start_date:较早的日期。

end_date:较晚的日期。如果 end_date 早于 start_date,结果会是负数。

unit:指定计算差值的单位,必须用双引号括起来

"Y":计算整年数(不足一年的部分忽略)。

"M":计算整月数(不足一月的部分忽略)。

"D":计算天数。

"MD":忽略年和月,计算日期差(同月内的天数差,或跨月但忽略月年)。

"YM":忽略年和日,计算月份差(同年内或忽略年)。

"YD":忽略年,计算日期差(同一年内的天数差,或忽略年)。

重要提示: "MD""YD" 在某些边界情况下(如月末)结果可能不符合直觉,使用需谨慎。"Y", "M", "D", "YM" 最常用。

实操:

在 C1 输入入职日期 2020-05-15

在 C2 输入 =TODAY()(假设今天是 2023-10-27)。

计算工作年数:在 C3 输入 =DATEDIF(C1, C2, "Y"),结果为 3(整年)。

计算工作月数:在 C4 输入 =DATEDIF(C1, C2, "M"),结果为 41(整月)。

计算工作天数:在 C5 输入 =DATEDIF(C1, C2, "D"),结果为 1261

计算今年工作了多少个月:在 C6 输入 =DATEDIF(C1, C2, "YM"),结果为 5(从 5 月到 10 月)。

(谨慎使用) 计算本月工作了多少天:在 C7 输入 =DATEDIF(C1, C2, "MD"),结果为 12(从 15 号到 27 号)。注意:如果开始日期是 2023-01-31,结束日期是 2023-02-28"MD" 结果会是 -3,因为 Excel 处理月末逻辑特殊。


DAY(date) / MONTH(date) / YEAR(date) - 提取日/月/年

功能: 从一个日期序列值中提取出日、月、年的数字。

语法:

=DAY(日期) 返回 1 到 31 之间的数字。

=MONTH(日期) 返回 1 到 12 之间的数字。

=YEAR(日期) 返回 1900 到 9999 之间的四位数字。

实操:

在 D1 输入一个日期 2023-10-27

在 D2 输入 =DAY(D1),结果为 27

在 D3 输入 =MONTH(D1),结果为 10

在 D4 输入 =YEAR(D1),结果为 2023

组合应用: 计算下个月 1 号:=DATE(YEAR(TODAY()), MONTH(TODAY())+1, 1)


二、进阶实用日期函数与技巧


  1. EOMONTH(start_date, months) - 获取某月最后一天
  2. 功能: 返回指定日期之前或之后数月的那一月的最后一天的日期。计算月末神器!
  3. 语法: =EOMONTH(开始日期, 月数)
  4. 参数:
  5. start_date:基准日期。
  6. months:从 start_date 开始之前或之后的月数。正数表示未来,负数表示过去。0 表示 start_date 所在月的最后一天。
  7. 实操:
  8. 在 E1 输入 =TODAY()(假设 2023-10-27)。
  9. 获取本月最后一天:在 E2 输入 =EOMONTH(E1, 0),结果为 2023-10-31
  10. 获取下个月最后一天:在 E3 输入 =EOMONTH(E1, 1),结果为 2023-11-30
  11. 获取上个月最后一天:在 E4 输入 =EOMONTH(E1, -1),结果为 2023-09-30

  12. WORKDAY(start_date, days, [holidays]) - 计算工作日(排除周末和节假日)
  13. 功能: 返回在指定日期之前或之后数个工作日(排除周六、周日和自定义节假日)的日期。常用于计算项目截止日、任务到期日。
  14. 语法: =WORKDAY(开始日期, 工作日天数, [节假日列表])
  15. 参数:
  16. start_date:基准日期。
  17. days:从 start_date 开始之前(负数)或之后(正数)的工作日天数。不包括周末和节假日。
  18. [holidays]可选。一个包含要排除的节假日的单元格区域或数组常量。这些日期可以是任何格式,只要 Excel 能识别为日期即可。
  19. 实操:
  20. 在 F1 输入项目开始日 2023-10-27(周五)。
  21. 计算 5 个工作日后的日期(忽略节假日):在 F2 输入 =WORKDAY(F1, 5),结果为 2023-11-03(计算过程:10/27(五)->10/30(一), 31(二), 11/1(三), 2(四), 3(五))。
  22. 加入节假日: 假设 2023-11-01 是节假日。在 G1 输入 2023-11-01
  23. 计算 5 个工作日后的日期(排除节假日):在 F3 输入 =WORKDAY(F1, 5, G1),结果为 2023-11-06(因为 11 月 1 日被排除,顺延到 11 月 6 日周一)。

  24. NETWORKDAYS(start_date, end_date, [holidays]) - 计算两个日期之间的工作日天数
  25. 功能: 返回两个日期之间的完整工作日天数(排除周六、周日和自定义节假日)。常用于计算工作耗时、考勤。
  26. 语法: =NETWORKDAYS(开始日期, 结束日期, [节假日列表])
  27. 参数:
  28. start_date:开始日期。
  29. end_date:结束日期。
  30. [holidays]可选。要排除的节假日列表。
  31. 实操:
  32. 在 H1 输入任务开始日 2023-10-23(周一)。
  33. 在 H2 输入任务结束日 2023-10-27(周五)。
  34. 计算这周有多少个工作日(无节假日):在 H3 输入 =NETWORKDAYS(H1, H2),结果为 5(周一到周五)。
  35. 假设 2023-10-25(周三)是假期。在 I1 输入 2023-10-25
  36. 计算实际工作日:在 H4 输入 =NETWORKDAYS(H1, H2, I1),结果为 4(周一、二、四、五)。

  37. WEEKDAY(date, [return_type]) - 判断星期几
  38. 功能: 返回代表某个日期是星期几的数字。
  39. 语法: =WEEKDAY(日期, [返回类型])
  40. 参数:
  41. date:要判断的日期。
  42. [return_type]可选。决定数字如何代表星期几。常用选项:
  43. 1 或省略: 星期日 = 1,星期一 = 2, ..., 星期六 = 7 (默认)
  44. 2: 星期一 = 1,星期二 = 2, ..., 星期日 = 7 (国际标准 ISO 8601,推荐使用)
  45. 3: 星期一 = 0,星期二 = 1, ..., 星期日 = 6
  46. 实操:
  47. 在 J1 输入 =TODAY()(假设是 2023-10-27 星期五)。
  48. 判断是星期几(默认类型 1):在 J2 输入 =WEEKDAY(J1),结果为 6(表示星期五)。
  49. 判断是星期几(类型 2):在 J3 输入 =WEEKDAY(J1, 2),结果为 5(表示星期五)。
  50. 组合应用: 判断是否是周末 =IF(WEEKDAY(J1, 2) > 5, "周末", "工作日")=IF(OR(WEEKDAY(J1)=1, WEEKDAY(J1)=7), "周末", "工作日")

  51. DATEVALUE(date_text) - 将文本日期转换为序列值
  52. 功能: 将存储为文本的日期(如 "2023/10/27", "27-Oct-2023")转换为 Excel 可以识别的日期序列值。处理导入数据或文本格式日期必备!
  53. 语法: =DATEVALUE(日期文本)
  54. 参数:
  55. date_text:代表日期的文本字符串。Excel 必须能识别其格式。
  56. 实操:
  57. 在 K1 输入文本 "2023-10-27"(注意有英文双引号,或者直接输入 2023-10-27 但单元格格式为文本)。
  58. 在 K2 输入 =DATEVALUE(K1),结果为 45222(或对应的序列值)。
  59. 选中 K2,按 Ctrl + 1,将其格式设置为“日期”,即可正确显示为 2023-10-27
  60. 尝试转换 "Oct 27, 2023""27/10/2023"(注意你的系统日期分隔符设置)。

三、新人必知实操技巧与避坑指南


单元格格式是关键!

输入函数后显示一串数字?别慌!这是序列值。选中单元格 -> Ctrl + 1 -> “数字”选项卡 -> 分类选“日期” -> 选择你喜欢的格式(如 YYYY-MM-DD, YYYY 年 M 月 D 日)。

输入 20231027 想变成日期?先用 DATEVALUE(TEXT(20231027, "0000-00-00")) 或分列功能转换。

确保参与计算的单元格都是真正的日期格式,而不是文本。文本日期看起来像日期,但计算会出错(如 #VALUE!)。


灵活处理“年月日”分离数据

数据源中日期被拆分成年、月、日三列?直接用 DATE 函数组合:=DATE(年所在列, 月所在列, 日所在列)


动态日期计算

下个月今天: =DATE(YEAR(TODAY()), MONTH(TODAY())+1, DAY(TODAY())) (注意:如果下个月没有今天的天数,如 1 月 31 日加 1 个月会变成 3 月 2 日或 3 月 3 日,用 EOMONTH 更安全)

本月第一天: =DATE(YEAR(TODAY()), MONTH(TODAY()), 1)=EOMONTH(TODAY(), -1)+1

本月最后一天: =EOMONTH(TODAY(), 0)

季度末: 例如计算 Q1 末(3 月 31 日):=DATE(YEAR(A1), 3, 31)。更通用的季度末计算稍复杂,可用 DATE, MONTH, CEILING 组合。


处理时间差

直接相减:结束日期单元格 - 开始日期单元格 = 天数差(小数代表时间)。

提取整天数:=INT(结束日期 - 开始日期)=DATEDIF(开始日期, 结束日期, "D")

计算小时差:=(结束日期时间 - 开始日期时间) * 24 (结果为小数小时)

计算分钟差:=(结束日期时间 - 开始日期时间) * 24 * 60


错误处理

#VALUE!:最常见!通常因为某个参数不是真正的日期(可能是文本)。用 ISNUMBER 检查单元格是否是数字(日期本质是数字)。用 DATEVALUE 转换文本日期。

#NUM!:日期超出了 Excel 支持的范围(早于 1900 年 1 月 1 日或太远的未来),或 DATEDIFend_date 早于 start_dateunit 不支持负数。

结果不对:检查单元格格式是否正确设置为日期;检查 DATEDIFunit 参数是否加了双引号;检查 WORKDAY/NETWORKDAYS 的节假日范围是否正确。


生日/纪念日提醒

计算今年生日是否已过:=IF(DATE(YEAR(TODAY()), MONTH(生日), DAY(生日)) < TODAY(), "已过", "未过")

计算距离下次生日的天数:

今年生日:=DATE(YEAR(TODAY()), MONTH(生日), DAY(生日))

如果今年生日已过,则下次生日是明年:=IF(今年生日 < TODAY(), DATE(YEAR(TODAY())+1, MONTH(生日), DAY(生日)), 今年生日)

距离天数:=下次生日 - TODAY()


总结:

记住核心: 日期是数字,格式决定显示。

掌握核心函数: TODAY, NOW, DATE, DATEDIF, DAY/MONTH/YEAR 是基础。

活用进阶函数: EOMONTH (月末), WORKDAY/NETWORKDAYS (工作日计算), WEEKDAY (星期判断), DATEVALUE (文本转日期) 解决复杂问题。

重视格式: 确保参与计算的都是真日期,不是文本。

理解参数: 特别是 DATE 的月、日溢出规则和 DATEDIFunit 参数含义。

动手实操: 打开 Excel,按照上面的例子一步步输入练习,是掌握最快的方法!

通过理解这些函数和技巧,你就能高效地处理 Excel 中的各种日期相关任务,从简单的日期显示到复杂的项目排期和员工考勤计算都不在话下。多加练习,你会越来越熟练!

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表