Excel 日期计算函数 #

函数概览 #

日期计算函数用于进行复杂的日期运算,如计算日期差、工作日、月末日期等。

text
┌─────────────────────────────────────────────────────────────┐
│                    日期计算函数一览                          │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  DATEDIF     日期差    =DATEDIF(A1, B1, "Y")                │
│  EDATE       月后日期  =EDATE(A1, 3)                        │
│  EOMONTH     月末日期  =EOMONTH(A1, 0)                      │
│  WORKDAY     工作日    =WORKDAY(A1, 10)                     │
│  NETWORKDAYS 工作日数  =NETWORKDAYS(A1, B1)                 │
│  DAYS        天数差    =DAYS(B1, A1)                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

DATEDIF 函数 #

语法 #

excel
=DATEDIF(start_date, end_date, unit)

参数:
- start_date: 开始日期
- end_date: 结束日期
- unit: 计算单位
  - "Y": 完整年数
  - "M": 完整月数
  - "D": 天数
  - "YM": 忽略年份的月数
  - "YD": 忽略年份的天数
  - "MD": 忽略年份和月份的天数

基本用法 #

excel
开始日期:2020/3/15
结束日期:2024/1/20

=DATEDIF(A1, B1, "Y")    → 3     完整年数
=DATEDIF(A1, B1, "M")    → 46    完整月数
=DATEDIF(A1, B1, "D")    → 1407  天数
=DATEDIF(A1, B1, "YM")   → 10    忽略年份的月数
=DATEDIF(A1, B1, "YD")   → 311   忽略年份的天数
=DATEDIF(A1, B1, "MD")   → 5     忽略年份和月份的天数

实际应用 #

excel
计算年龄:
=DATEDIF(A1, TODAY(), "Y")

计算工龄(年月格式):
=DATEDIF(A1, TODAY(), "Y") & "年" & DATEDIF(A1, TODAY(), "YM") & "月"

计算精确年龄:
=DATEDIF(A1, TODAY(), "Y") & "岁" & 
 DATEDIF(A1, TODAY(), "YM") & "月" & 
 DATEDIF(A1, TODAY(), "MD") & "天"

实际示例 #

text
员工工龄:
    A            B
1   入职日期     工龄
2   2020/3/15    =DATEDIF(A2, TODAY(), "Y") & "年" & 
                DATEDIF(A2, TODAY(), "YM") & "月"
                → "3年10月"

注意事项 #

excel
DATEDIF 是隐藏函数,不会在函数列表中显示
但可以直接输入使用

结束日期必须大于开始日期,否则返回 #NUM!

EDATE 函数 #

语法 #

excel
=EDATE(start_date, months)

返回指定月数之前或之后的日期

基本用法 #

excel
=EDATE(DATE(2024, 1, 15), 3)    → 2024/4/15  3个月后
=EDATE(DATE(2024, 1, 15), -3)   → 2023/10/15 3个月前
=EDATE(DATE(2024, 1, 31), 1)    → 2024/2/29  自动调整
=EDATE(TODAY(), 12)             → 明年今天

实际应用 #

excel
计算合同到期日(一年后):
=EDATE(A1, 12)

计算季度末:
=EDATE(DATE(YEAR(A1), ROUNDUP(MONTH(A1)/3, 0)*3, 1), 0) - 1

计算试用期结束日(3个月后):
=EDATE(A1, 3) - 1

计算下月同一天:
=EDATE(TODAY(), 1)

实际示例 #

text
合同管理:
    A            B          C
1   签约日期     期限(月)   到期日
2   2024/1/15    12         =EDATE(A2, B2)  → 2025/1/15
3   2024/1/31    1          =EDATE(A3, B3)  → 2024/2/29

EOMONTH 函数 #

语法 #

excel
=EOMONTH(start_date, months)

返回指定月数之前或之后的月末日期

基本用法 #

excel
=EOMONTH(DATE(2024, 1, 15), 0)   → 2024/1/31   本月末
=EOMONTH(DATE(2024, 1, 15), 1)   → 2024/2/29   下月末
=EOMONTH(DATE(2024, 1, 15), -1)  → 2023/12/31  上月末
=EOMONTH(TODAY(), 0)             → 本月末

实际应用 #

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

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

下月第一天:
=EOMONTH(TODAY(), 0) + 1

本季度最后一天:
=EOMONTH(DATE(YEAR(TODAY()), ROUNDUP(MONTH(TODAY())/3, 0)*3, 1), 0)

本年最后一天:
=EOMONTH(DATE(YEAR(TODAY()), 12, 1), 0)

实际示例 #

text
月末报表:
    A            B              C
1   日期         月初           月末
2   2024/1/15    =EOMONTH(A2,-1)+1  =EOMONTH(A2, 0)
                → 2024/1/1      → 2024/1/31

计算本月天数 #

excel
=DAY(EOMONTH(A1, 0))

或:
=DAY(EOMONTH(TODAY(), 0))

WORKDAY 函数 #

语法 #

excel
=WORKDAY(start_date, days, [holidays])

返回指定工作日数之后或之前的日期
自动跳过周末

基本用法 #

excel
=WORKDAY(DATE(2024, 1, 15), 10)   → 10个工作日后
=WORKDAY(DATE(2024, 1, 15), -5)   → 5个工作日前
=WORKDAY(TODAY(), 5)              → 5个工作日后

包含节假日 #

excel
=WORKDAY(A1, 10, 节假日范围)

节假日范围示例:
=WORKDAY(A1, 10, {"2024/1/1", "2024/2/10"})
=WORKDAY(A1, 10, $H$1:$H$10)

实际应用 #

excel
项目截止日(跳过周末):
=WORKDAY(A1, 20)

计算交货日期:
=WORKDAY(订单日期, 处理天数)

排除节假日:
=WORKDAY(A1, 10, 节假日列表)

实际示例 #

text
项目管理:
    A            B          C
1   开始日期     工作日数   完成日期
2   2024/1/15    10         =WORKDAY(A2, B2)  → 2024/1/29

WORKDAY.INTL 函数 #

语法 #

excel
=WORKDAY.INTL(start_date, days, [weekend], [holidays])

可以自定义周末

周末参数 #

text
1 或省略:周六、周日
2:周日、周一
3:周一、周二
...
7:周五、周六
11:仅周日
12:仅周一
...
17:仅周六

或使用字符串:"0000011" 表示周六周日为周末

基本用法 #

excel
=WORKDAY.INTL(A1, 10, 1)           周末为周六周日
=WORKDAY.INTL(A1, 10, 7)           周末为周五周六
=WORKDAY.INTL(A1, 10, "0000011")   自定义周末

NETWORKDAYS 函数 #

语法 #

excel
=NETWORKDAYS(start_date, end_date, [holidays])

返回两个日期之间的工作日数
自动排除周末

基本用法 #

excel
=NETWORKDAYS(DATE(2024, 1, 1), DATE(2024, 1, 31))  → 23个工作日
=NETWORKDAYS(A1, B1)                               两个日期间的工作日
=NETWORKDAYS(A1, B1, 节假日范围)                    排除节假日

实际应用 #

excel
计算实际工作天数:
=NETWORKDAYS(A1, B1)

计算项目工期:
=NETWORKDAYS(开始日期, 结束日期)

计算考勤天数:
=NETWORKDAYS(入职日期, 离职日期)

实际示例 #

text
项目工期:
    A            B            C
1   开始日期     结束日期     工作日数
2   2024/1/1     2024/1/31    =NETWORKDAYS(A2, B2)  → 23

NETWORKDAYS.INTL 函数 #

语法 #

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

可以自定义周末

基本用法 #

excel
=NETWORKDAYS.INTL(A1, B1, 1)           周末为周六周日
=NETWORKDAYS.INTL(A1, B1, 7)           周末为周五周六
=NETWORKDAYS.INTL(A1, B1, "0000011")   自定义周末

DAYS 函数 #

语法 #

excel
=DAYS(end_date, start_date)

返回两个日期之间的天数

基本用法 #

excel
=DAYS(DATE(2024, 1, 31), DATE(2024, 1, 1))  → 30
=DAYS(B1, A1)                               B1-A1的天数

DAYS vs 直接相减 #

excel
=DAYS(B1, A1)     使用函数
=B1-A1            直接相减

两者结果相同,但 DAYS 更明确表达意图

函数组合应用 #

计算年龄(精确) #

excel
=DATEDIF(A1, TODAY(), "Y") & "岁" & 
 DATEDIF(A1, TODAY(), "YM") & "月" & 
 DATEDIF(A1, TODAY(), "MD") & "天"

计算合同剩余天数 #

excel
=MAX(0, A1-TODAY())

或包含工作日计算:
=MAX(0, NETWORKDAYS(TODAY(), A1))

计算本季度第一天和最后一天 #

excel
本季度第一天:
=DATE(YEAR(A1), ROUNDUP(MONTH(A1)/3, 0)*3-2, 1)

本季度最后一天:
=EOMONTH(DATE(YEAR(A1), ROUNDUP(MONTH(A1)/3, 0)*3, 1), 0)

计算下个星期几的日期 #

excel
下个周一:
=TODAY() + 7 - WEEKDAY(TODAY(), 2) + 1

下个周五:
=TODAY() + 7 - WEEKDAY(TODAY(), 2) + 5

或通用公式(下个指定星期几):
=TODAY() + 7 - WEEKDAY(TODAY(), 2) + 目标星期几

计算两个日期间的周末天数 #

excel
=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(A1&":"&B1)), 2)>5))

或:
=B1-A1+1-NETWORKDAYS(A1, B1)

实战案例 #

案例1:员工试用期管理 #

text
数据:
    A            B          C            D
1   入职日期     试用期(月)  试用期结束    转正日期
2   2024/1/15    3          =EDATE(A2,B2)-1  =EDATE(A2,B2)
                            → 2024/4/14      → 2024/4/15

案例2:项目进度计算 #

text
数据:
    A            B            C          D
1   开始日期     计划天数     完成日期    实际工作日
2   2024/1/1     20           =WORKDAY(A2,B2)  =NETWORKDAYS(A2,C2)
                            → 2024/1/29       → 20

案例3:贷款到期计算 #

text
数据:
    A            B          C
1   放款日期     期限(月)   到期日
2   2024/1/15    12         =EOMONTH(EDATE(A2,B2),0)
                            → 2025/1/31

小结 #

日期计算函数是进行复杂日期运算的利器:

函数 用途 示例
DATEDIF 日期差 =DATEDIF(A1, B1, "Y")
EDATE 月后日期 =EDATE(A1, 3)
EOMONTH 月末日期 =EOMONTH(A1, 0)
WORKDAY 工作日 =WORKDAY(A1, 10)
NETWORKDAYS 工作日数 =NETWORKDAYS(A1, B1)
DAYS 天数差 =DAYS(B1, A1)

接下来,让我们学习 时间函数,掌握时间处理技巧。

最后更新:2026-04-11