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