=A2+30 返回 A2 中日期之后 30 天的日期。Excel 把日期存储为天数,所以加上一个数字,就是把日期往后推那么多天。月份的长度各不相同,所以加月数要用 =EDATE(A2,3):三个月后的同一天。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Invoice date | Due (30 days) | Due (90 days) | Two weeks later |
| 2 | 2026-03-10 | 2026-04-09 | 2026-06-08 | 2026-03-24 |
| 3 | 2026-03-25 | 2026-04-24 | 2026-06-23 | 2026-04-08 |
| 4 | 2026-04-02 | 2026-05-02 | 2026-07-01 | 2026-04-16 |
| 5 | 2026-12-15 | 2027-01-14 | 2027-03-15 | 2026-12-29 |
一张日期为 2026-03-10 的发票,30 天后到期是 2026-04-09,90 天后到期是 2026-06-08。12 月的发票会自动跨到 2027 年,不需要额外处理。往回推就用减法:=A2-30 是 30 天之前。按周计算就用乘法:=A2+7*2 是两周之后。
用 EDATE 加月数
“一个月后”不是固定的天数,所以 +30 会产生偏差:从 2 月 1 日算起会落在 3 月 3 日。EDATE(start_date, months) 保持日期中的“日”不变,只改变月份。月数为负数时则往回推。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Start | Months | Renews | Reminder |
| 2 | 2026-01-15 | 1 | 2026-02-15 | 2026-01-15 |
| 3 | 2026-02-01 | 3 | 2026-05-01 | 2026-04-01 |
| 4 | 2026-03-20 | 12 | 2027-03-20 | 2027-02-20 |
| 5 | 2026-11-05 | 6 | 2027-05-05 | 2027-04-05 |
从 2026-03-20 开始的年付套餐在 2027-03-20 续订,从 11 月开始的六个月套餐在 2027-05-05 续订。D 列在每次续订前一个月发送提醒。修改 B 列中的月数,看看日期如何变化。
如果开始日期中的“日”在目标月份中不存在,EDATE 会使用该月的最后一天。下面是 Excel 的结果:
=EDATE("2026-01-31", 1) 2026-02-28
=EDATE("2026-08-31", 1) 2026-09-30
=EDATE("2024-03-31", -1) 2024-02-29
给日期加年数
一年是 12 个月,所以 =EDATE(A2,12*B2) 会加上 B2 年。对于保修期、合同和纪念日,这样可以保持月和日不变。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Bought | Years | Warranty ends | With DATE |
| 2 | 2026-03-14 | 2 | 2028-03-14 | 2028-03-14 |
| 3 | 2025-07-01 | 5 | 2030-07-01 | 2030-07-01 |
| 4 | 2026-11-28 | 3 | 2029-11-28 | 2029-11-28 |
两列给出的都是 2028-03-14、2030-07-01 和 2029-11-28。它们只在一个日期上不同:2 月 29 日。=DATE(2027,2,29) 会顺延到 2027-03-01,而 EDATE 返回 2027-02-28。
用 EOMONTH 求月末
EOMONTH(start_date, months) 返回某个月的最后一天:0 表示同一个月,1 表示下个月,-1 表示上个月。某个月的第一天就是上个月月末的后一天,即 EOMONTH(A2,-1)+1。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Date | End of month | End of next month | First of month |
| 2 | 2026-02-10 | 2026-02-28 | 2026-03-31 | 2026-02-01 |
| 3 | 2024-02-10 | 2024-02-29 | 2024-03-31 | 2024-02-01 |
| 4 | 2026-12-31 | 2026-12-31 | 2027-01-31 | 2026-12-01 |
2026 年 2 月在 28 日结束,2024 年 2 月在 29 日结束。从 2026-12-31 算起,下个月的月末是 2027-01-31。“开票后次月月末付款”用的就是 EOMONTH 公式:=EOMONTH(A2,1)。如果要按工作日计算,用 WORKDAY:=WORKDAY(A2,10) 是 A2 之后的第 10 个工作日,会跳过周末(见 NETWORKDAYS 和 WORKDAY)。
练习:续订日期和月末
| A | B | C | |
|---|---|---|---|
| 1 | Start | Months | Renews |
| 2 | 2026-03-10 | 6 |
轮到你了: 在 C2 中返回 A2 中的开始日期往后推 B2 个月的日期。
| A | B | |
|---|---|---|
| 1 | Date | Month end |
| 2 | 2026-04-14 |
轮到你了: 在 B2 中返回 A2 中日期所在月份的最后一天。
常见错误:用 DATE 和 MONTH+1 加一个月
像 =DATE(YEAR(A2),MONTH(A2)+1,DAY(A2)) 这样的公式看起来就是“一个月后”,而且大多数时候都是对的。但当下个月没有这一天时,DATE 不会停在月末,而是把多出来的天数顺延到再下一个月。
| A | B | C | |
|---|---|---|---|
| 1 | Date | MONTH+1 with DATE | End of next month |
| 2 | 2026-01-31 | 2026-03-03 | 2026-02-28 |
从 1 月 31 日算起,DATE 公式返回 2026-03-03,因为“2 月 31 日”比 2 月 28 日多出三天。EDATE 返回 2026-02-28;如果你想要的就是月末,EOMONTH 能直接给出。关于 DATE 如何处理超出范围的月和日,详见 DATE 函数。
常见问题
如何在 Excel 中给日期加天数?
直接加上数字:=A2+30 是 A2 中日期之后 30 天,=A2-30 是之前 30 天。Excel 把日期存储为天数,所以普通的加法可以跨月、跨年。
如何在 Excel 中给日期加月数?
用 EDATE:=EDATE(A2,3) 返回三个月后的同一天,=EDATE(A2,-3) 返回三个月前的同一天。如果那一天不存在,EDATE 会使用该月的最后一天:=EDATE("2026-01-31",1) 是 2026-02-28。
如何在 Excel 中求某月的最后一天?
=EOMONTH(A2,0) 返回 A2 所在月份的最后一天。=EOMONTH(A2,1) 是下个月的月末,=EOMONTH(A2,-1)+1 是 A2 所在月份的第一天。
如何在 Excel 中给日期加年数?
=EDATE(A2,12*5) 加五年。=DATE(YEAR(A2)+5,MONTH(A2),DAY(A2)) 也可以,但在非闰年会把 2 月 29 日变成 3 月 1 日,而 EDATE 给出的是 2 月 28 日。
为什么日期加天数后显示的是数字而不是日期?
结果单元格的格式是“常规”或“数值”,所以日期显示成了它的序列号,比如 46126。选中它,选择“开始 > 数字格式 > 短日期”。