让Excel读懂时间:自动刷新日期、精准计算年龄、剔除周末和节假日
一、TODAY —— 今天的日期
语法
=TODAY()
详细使用分析
返回当前日期(不含时间)
易失函数:每次工作表重算时自动更新为当天日期
无参数,括号里什么都不写
三大经典应用
① 自动计算账龄/工龄
=TODAY()-B2 → 从B2到今天的间隔天数
② 判断是否过期
=IF(到期日<TODAY(), "已过期", "未过期")
③ 制作自动更新的日报标题
="数据更新至"&TEXT(TODAY(),"yyyy年mm月dd日")
⚠️ 注意事项
二、NOW —— 现在的时间
语法
=NOW()
详细使用分析
返回当前日期+时间
同样是易失函数
整数部分代表日期,小数部分代表时间
经典应用
① 记录最后修改时间(需开启迭代计算)
=IF(A2<>"", IF(B2="", NOW(), B2), "") — 当A2输入内容时,B2记录时间且不再变化
② 计算倒计时(精确到小时)
=INT(目标日期-NOW())&"天"&TEXT(目标日期-NOW(),"h小时m分")
③ 时间戳判断
=IF(NOW()>=截止时间, "截止", "进行中")
⚠️ 注意
NOW 会随每一次操作刷新,不适合作为“录入时间”永久保存。
三、YEAR / MONTH / DAY —— 提取年/月/日
语法
=YEAR(日期)
=MONTH(日期)
=DAY(日期)
详细使用分析
返回值均为数字:YEAR返回4位数字,MONTH返回1-12,DAY返回1-31
经典应用场景
① 按月份汇总数据(搭配数据透视表或SUMIF)
=MONTH(A2) 创建辅助列,再按月求和
② 判断季度
=ROUNDUP(MONTH(A2)/3, 0) → 返回1-4季度
③ 提取生日(忽略年份)
=MONTH(生日)&"-"&DAY(生日)
④ 计算本月天数
=DAY(DATE(YEAR(A1), MONTH(A1)+1, 0)) — DATE第三参数写0,返回上月的最后一天
四、HOUR / MINUTE / SECOND —— 提取时/分/秒
语法
=HOUR(时间) — 返回0-23
=MINUTE(时间) — 返回0-59
=SECOND(时间) — 返回0-59
详细使用分析
时间可以是:时间单元格、带时间的日期、文本型时间(如"14:30:00")
经典应用
① 判断上午/下午
=IF(HOUR(A2)<12, "上午", "下午")
② 计算加班时长(分钟)
=(下班时间-上班时间)*24*60 — 返回分钟数
③ 打卡时段分组
=IF(HOUR(打卡时间)<9, "早到", IF(HOUR(打卡时间)=9, "准点", "迟到"))
④ 时间精确拆分
="现在时刻:"&HOUR(NOW())&"点"&MINUTE(NOW())&"分"
五、DATE —— 组合生成日期
语法
=DATE(年, 月, 日)
详细使用分析
三大优势:
| |
|---|
| |
| DATE(2024,3,0) |
| DATE(2024,1,32) |
经典用法
① 根据年月日拼接
=DATE(A2, B2, C2) — A2=2024, B2=8, C2=20 → 2024-08-20
② 本月第一天
=DATE(YEAR(TODAY()), MONTH(TODAY()), 1)
③ 本月最后一天
=DATE(YEAR(TODAY()), MONTH(TODAY())+1, 0)
④ 动态季度第一天
=DATE(YEAR(A1), CHOOSE(季度,1,4,7,10), 1)
六、DATEDIF —— 计算日期差(隐藏神级函数)
语法
=DATEDIF(开始日期, 结束日期, 单位)
详细使用分析
⚠️ 注意:Excel帮助文档中没有这个函数,但完全可用!
单位参数详解
| | |
|---|
"Y" | | 2020-06-01 → 2024-08-20 = 4年 |
"M" | | 2024-01-15 → 2024-08-20 = 7个月 |
"D" | | |
"YM" | | 2020-06-01到2024-08-20 → 2个月 |
"YD" | | 2020-06-01到2024-08-20 → 80天 |
"MD" | | |
王牌应用
① 计算年龄(精确到岁)
=DATEDIF(出生日期, TODAY(), "Y")
② 计算工龄(X年Y个月)
=DATEDIF(入职日期, TODAY(), "Y")&"年"&DATEDIF(入职日期, TODAY(), "YM")&"个月"
③ 计算“还剩多少天”
=DATEDIF(TODAY(), 目标日期, "D") — 正数(未来)或负数(已过)
④ 计算完整月数(用于租金/利息)
=DATEDIF(开始日, 结束日, "M")
⚠️ 常见报错
七、WEEKDAY —— 星期几(数字)
语法
=WEEKDAY(日期, [返回类型])
详细使用分析
返回类型(决定周一=几)
✅ 最推荐用 2:周一=1,周日=7,逻辑最自然
经典应用
① 判断周末
=IF(WEEKDAY(A2, 2)>=6, "周末", "工作日")
② 周末标记红色(条件格式中用公式)
=OR(WEEKDAY(A1,2)=6, WEEKDAY(A1,2)=7)
③ 只显示周一的日期
=IF(WEEKDAY(A2,2)=1, "周一", "")
④ 本周一的日期(不管今天是周几)
=TODAY()-WEEKDAY(TODAY(),2)+1
八、WEEKNUM —— 一年中的第几周
语法
=WEEKNUM(日期, [返回类型])
详细使用分析
返回类型决定“一周从哪天开始”
经典应用
① 生成周报汇总维度
添加辅助列 =YEAR(A2)&"-W"&TEXT(WEEKNUM(A2,2),"00") → 2024-W34
② 判断是否同一周
=WEEKNUM(A2,2)=WEEKNUM(B2,2)
③ 本月第几周
=WEEKNUM(日期,2)-WEEKNUM(EOMONTH(日期,-1)+1,2)+1
④ 本周年初至今求和(结合SUMIFS)
=SUMIFS(销售额列, 周数列, WEEKNUM(TODAY(),2))
九、NETWORKDAYS —— 工作日天数
语法
=NETWORKDAYS(开始日期, 结束日期, [节假日列表])
详细使用分析
自动排除周六+周日
可选排除指定节假日(如国庆、春节)
同类函数
| |
|---|
NETWORKDAYS | |
NETWORKDAYS.INTL | |
WORKDAY | |
WORKDAY.INTL | |
经典应用
① 计算项目实际工作天数
=NETWORKDAYS(项目开始, 项目结束, 假期表!$A$2:$A$10)
② 计算员工应出勤天数
=NETWORKDAYS(月初, 月底, 法定假日表)
③ 排除自定义周末(NETWORKDAYS.INTL)
=NETWORKDAYS.INTL(开始,结束, 周末代码, 假期表)
周末代码示例:
④ 计算实际工期(包含节假日)
=结束日期-开始日期+1-NETWORKDAYS(开始日期,结束日期,假期表) → 非工作天数
综合实战:一套完整的日期时间工具箱
场景:员工考勤与年龄分析系统
根据出生日期计算年龄(精确到天)
判断生日是否在本周
计算截止今天的实际工作年限(含年/月)
公式组合
| |
|---|
| =DATEDIF(B2, TODAY(), "Y")&"岁"&DATEDIF(B2,TODAY(),"YM")&"个月"&DATEDIF(B2,TODAY(),"MD")&"天" |
| =WEEKNUM(DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)),2)=WEEKNUM(TODAY(),2) |
| =DATEDIF(入职日, TODAY(), "Y")&"年"&DATEDIF(入职日, TODAY(), "YM")&"月" |
| =NETWORKDAYS(TODAY(), 项目截止, 节假日表!A:A) |
速查总结表(建议收藏)