Excel怎么计算两个日期相差几个月?
- 2026-09-23 11:26:34
会员系统导出的数据要算会员期,财务要算摊销月数,租期、账期、质保期……都绕不开「相差几个月」。月份比天数难算:跨年、大小月、不满整月,手动掰指头容易错。今天 3 种方法,从整月数到「X年X个月」全部搞定。
场景举例
统计会员开通情况,要算每人会员期总共几个月:
| 会员 | 开通日期 | 到期日期 | 相差月数 |
|---|---|---|---|
| 张伟 | 2025/9/20 | 2026/9/20 | 12 |
| 李娜 | 2025/10/15 | 2026/4/15 | 6 |
| 王强 | 2026/2/28 | 2026/9/13 | 6 |
目标:D 列自动算出开通到到期的完整月数,不满整月不算。
方法一:DATEDIF 算完整月数
操作步骤
- 在 D2 输入:
=DATEDIF(B2,C2,"M")
- 回车下拉,得到 12、6、6。
看王强这行:2/28 到 9/13,只满 6 个整月,第 7 个月没住满就不算,结果就是 6。
方法二:只按年月差计算(不看「日」)
有的场景不管几号,只看跨了几个月份,比如按月计提费用:
=(YEAR(C2)-YEAR(B2))*12+MONTH(C2)-MONTH(B2)
思路:先把年差换算成月(×12),再加上月份差。王强这行会得到 7——从 2 月跨到 9 月,正好 7 个月份。
📌 两种口径经常差 1,做表前先想清楚你要「住满的月数」还是「跨过的月份数」。
方法三:X年X个月一起显示
在 E2 输入:
=DATEDIF(B2,C2,"Y")&"年"&DATEDIF(B2,C2,"YM")&"个月"
李娜显示「0年6个月」,张伟显示「1年0个月」,会员期汇报一眼看清。
💡 "YM" 是关键:它专门取扣掉整年后剩下的零头月数,不会把整年折成一大串月。
公式说明
| 参数 | 含义 | 示例取值 |
|---|---|---|
| YEAR(日期) | 提取年份 | YEAR(C2)=2026 |
| MONTH(日期) | 提取月份 | MONTH(C2)=9 |
| (年差)*12 | 把年差换算成月数 | 12 |
| "M" | DATEDIF 单位:完整月数 | 6 |
| "YM" | DATEDIF 单位:忽略整年后的月数 | 0 |
常见问题
Q1:DATEDIF "M" 的结果比预期少 1? 答:它算的是「完整月数」,不满整月的天数直接舍去。要「跨过几个月份」的口径,改用方法二的公式。
Q2:结果报 #NUM! 错误? 答:开始日期晚于结束日期了,DATEDIF 不接受倒序,把两列顺序核对一遍。
Q3:输入 DATEDIF 怎么没有参数提示? 答:它是隐藏函数,不弹提示很正常,语法记牢就行:DATEDIF(开始日期,结束日期,单位)。
避坑指南
- 「M」和「YM」别混用:前者是总月数(12 个月算 12),后者是去掉整年的零头(1 年 0 个月算 0);
- 月数结果列如果是日期格式会显示成 1900 年的日期,改成「常规」即可;
- 要算「某天 +3 个月是哪天」,用 EDATE 函数,别手动加 90 天,大小月会出错。
写在最后
| 方法 | 适用场景 | 难度 |
|---|---|---|
| DATEDIF "M" | 完整月数,租期会员期 | ⭐ |
| YEAR/MONTH 组合 | 跨越的月份数,按月计提 | ⭐⭐ |
| "Y"+"YM" 组合 | 显示「X年X个月」 | ⭐⭐ |
先定口径再写公式,是算月份最重要的一步。
💡 觉得有用的话,记得点赞、在看、转发三连,让更多职场同事看到。关注我,每天更新一个实用办公技巧!下一篇教你「Excel怎么计算工龄?入职日期自动计算工龄」,HR 小伙伴千万别错过。
如果这篇内容帮到你,欢迎点赞、在看和转发给需要的同事朋友~后续会持续更新实用技巧,记得关注不迷路。