跳转至

DATE函数

一、日期函数完整对比表

函数 用途 语法 参数说明 示例 返回值类型 注意事项
DATE() 组合年、月、日创建标准日期 =DATE(year, month, day) year: 年份(1900-9999)
month: 月份(1-12)
day: 日期(1-31)
=DATE(2024, 3, 15) → 2024/3/15 日期(序列值) 1. 月份>12会进位到下年
2. 日期>当月天数会进位到下月
3. 年份<1900会自动加1900
TODAY() 返回当前系统日期(不含时间) =TODAY() 无参数 =TODAY() → 2024/3/15 日期(序列值) 1. 每次打开文件或计算时更新
2. 不包含时间信息
3. 按F9可固定当前值
NOW() 返回当前系统日期和时间 =NOW() 无参数 =NOW() → 2024/3/15 14:30:25 日期时间(序列值) 1. 包含日期和时间
2. 时间是小数值(0-0.999)
3. 同样会实时更新
YEAR() 从日期中提取年份 =YEAR(serial_number) serial_number: Excel日期序列值或日期格式 =YEAR("2024-03-15") → 2024 整数 1. 返回1900-9999的整数
2. 参数必须是有效日期
MONTH() 从日期中提取月份 =MONTH(serial_number) serial_number: Excel日期序列值或日期格式 =MONTH("2024-03-15") → 3 整数(1-12) 1. 总是返回1-12的整数
2. 配合CHOOSE可转成月份名
DAY() 从日期中提取日数 =DAY(serial_number) serial_number: Excel日期序列值或日期格式 =DAY("2024-03-15") → 15 整数(1-31) 1. 返回当月的第几天
2. 可计算当月剩余天数

二、DATE() 函数参数处理规则

参数 合法范围 特殊处理 示例
year 1900-9999 0-1899会自动加1900 =DATE(100, 1, 1) → 2000/1/1
month 1-12(常规) >12会进位到下年 =DATE(2024, 15, 1) → 2025/3/1
负数 向前推算月份 =DATE(2024, -2, 1) → 2023/10/1
day 1-31(常规) >当月天数进位到下月 =DATE(2024, 2, 30) → 2024/3/1
0或负数 向前推算日期 =DATE(2024, 3, 0) → 2024/2/29

三、提取函数示例对比

原始日期 YEAR() MONTH() DAY() 星期几(扩展)
2024/3/15 2024 3 15 5(星期五)
2023/12/31 2023 12 31 7(星期日)
2024/2/29 2024 2 29 4(星期四)
1900/1/1 1900 1 1 1(星期一)

四、日期计算常见需求

需求 公式示例 说明
计算年龄 =YEAR(TODAY())-YEAR(出生日期) 简易年龄计算
精确年龄 =DATEDIF(出生日期,TODAY(),"Y") 考虑月份和日期的精确年龄
当月第一天 =DATE(YEAR(A1), MONTH(A1), 1) 任何日期的当月1号
当月最后一天 =EOMONTH(A1, 0) 需要EOMONTH函数
季度判断 =INT((MONTH(A1)-1)/3)+1 返回1-4季度
工作日计算 =NETWORKDAYS(开始日期,结束日期) 排除周末
日期转文本 =TEXT(A1, "yyyy年mm月dd日") 自定义格式显示

五、TODAY() 和 NOW() 的应用场景

函数 应用场景 公式示例 结果示例
TODAY() 到期提醒 =IF(到期日期<TODAY(),"已过期","有效") 根据当天判断
计算天数 =TODAY()-开始日期 已进行天数
动态标题 ="报告日期:"&TEXT(TODAY(),"yyyy-mm-dd") 报告日期:2024-03-15
NOW() 时间戳 =NOW() 记录操作时间
计算时长 =(NOW()-开始时间)*24 小时数
倒计时 =INT((结束时间-NOW())*1440) 剩余分钟数

六、常见错误和解决方法

错误现象 可能原因 解决方法
#VALUE! 参数不是有效日期 使用DATEVALUE()转换文本
=DATEVALUE("2024-03-15")
显示为数字 单元格格式不对 设置单元格格式为日期
TODAY()不更新 手动计算模式 按F9刷新或设置自动计算
年份显示1900 年份为0 检查year参数是否为空或0
月份显示错误 month为0或负数 理解进位规则,使用正数月份
DAY()返回0 day参数为0 =DATE(2024,3,0)返回2月最后一天

七、日期序列值说明

概念 说明
日期基准 1 1900年1月1日 = 1
时间表示 小数 12:00:00 = 0.5
18:00:00 = 0.75
NOW()值 数字 2024/3/15 14:30 = 45356.6042
转换方法 格式 数字 → 右键设置单元格格式为日期

八、快速记忆口诀

DATE三参数,年月日组合
TODAY只日期,NOW带时间
YEAR取年份,MONTH取月份
DAY取日数,提取最常用

九、使用建议

  1. 输入日期时:尽量使用DATE()函数,避免文本格式问题
  2. 动态日期:报表中使用TODAY(),保证每天自动更新
  3. 时间记录:数据录入时间用NOW()作为时间戳
  4. 日期计算:先提取YEAR/MONTH/DAY,再进行逻辑判断
  5. 格式统一:所有日期相关单元格使用相同日期格式

DATE()练习

  1. 创建特定日期

    =DATE(2024, 1, 15)  → 2024-01-15
    

  2. 月份自动进位

    =DATE(2023, 13, 1)  → 2024-01-01(13月进位到次年1月)
    

  3. 日期自动进位

    =DATE(2024, 1, 32)  → 2024-02-01(32日进位到下月)
    

TODAY()练习

1.显示当前日期

=TODAY()  → 2024-01-15(假设今天是2024年1月15日)
2.计算距离春节还有多少天

=DATE(2024, 2, 10) - TODAY()

3.计算员工入职天数

员工ID 姓名 入职日期 出生日期 入职天数
E001 张三 2018-03-15 1990-05-20 =TODAY() - C2
E002 李四 2016-12-08 1992-01-20 =TODAY() - C2

4.在项目任务表中计算项目剩余天数

任务ID 项目名称 结束日期 剩余天数
P001 官网重构 2024-01-31 =C2-TODAY()

MONTH()练习

1.提取月份

=MONTH("2024-03-15")  → 3

2.计算员工转正日期(试用期3个月)

员工ID 姓名 入职日期 出生日期 转正日期
E001 张三 2018-03-15 1990-05-20 =DATE(YEAR(C2), MONTH(C2)+3, DAY(C2))

3.生日月份提醒

=IF(MONTH(TODAY())=MONTH(生日), "本月生日", "")

YEAR()练习

在销售订单表中按年份统计:

订单ID 下单日期 年份
S001 2024-01-03 =YEAR(B2)

2.在员工基本信息表中计算员工工龄

员工ID 姓名 入职日期 出生日期 工龄计算
E001 张三 2018-03-15 1990-05-20 =DATE(YEAR(TODAY())-YEAR(C2),1,1)

3.在员工基本信息表中计算员工年龄:

员工ID 姓名 入职日期 出生日期 年龄计算
E001 张三 2018-03-15 1990-05-20 =DATE(YEAR(TODAY())-YEAR(D2),1,1)

DAY()练习

1.提取日数

=DAY("2024-01-25")  → 25

2.生成月度报告标题

=YEAR(TODAY()) & "年" & MONTH(TODAY()) & "月" & DAY(TODAY()) & "日报表"

一、基础练习题(初级)

练习1:创建动态日期标题

场景:每天制作日报,标题需要自动更新为当天日期

要求

  1. 在A1单元格创建标题,格式为"销售日报(YYYY年MM月DD日)"
  2. 每天打开表格时,日期自动更新为当天

示例

今天打开显示:销售日报(2026年01月04日)
明天打开显示:销售日报(2026年01月05日)

练习2:判断产品是否过期

场景:库存管理中检查食品保质期

数据

A B C
产品名称 生产日期 保质期(天)
牛奶 2025-12-25 15
面包 2025-12-30 7
鸡蛋 2026-01-01 30

要求

在D列添加"状态"列,判断产品是否过期: - 如果过期显示"已过期" - 如果3天内过期显示"即将过期" - 否则显示"正常"

练习3:计算项目已进行天数

场景:项目进度跟踪

数据

A B
项目名称 开始日期
官网开发 2025-11-01
移动端APP 2025-12-15
数据库升级 2026-01-01

要求

  1. 在C列计算每个项目已进行的天数
  2. 在D列计算已进行的完整周数

二、中级练习题

练习4:会议倒计时系统

场景:办公室会议室预约管理

数据

A B C
会议主题 开始时间 负责人
季度总结会 2026-01-10 14:30 张三
产品评审会 2026-01-05 09:00 李四
技术分享会 2026-01-07 15:00 王五

要求

  1. 在D列显示"状态":
  2. 会议已开始:"进行中"
  3. 会议未开始:显示"还有X天X小时"
  4. 会议已结束:"已完成"
  5. 在E列显示倒计时分钟数(会议开始前)

练习5:员工生日提醒系统

场景:人事部员工生日提醒

数据

A B
员工姓名 出生日期
张三 1990-05-20
李四 1992-08-12
王五 1993-11-05

要求

  1. 在C列计算员工年龄
  2. 在D列显示"生日提醒":
  3. 今天生日:"🎂今天生日!"
  4. 7天内生日:"即将生日(还有X天)"
  5. 其他:""

练习6:工时计算器

场景:员工加班时长计算

数据

A B
员工姓名 开始加班时间
张三 2026-01-03 18:30
李四 2026-01-03 19:00
王五 2026-01-04 17:45

要求

假设公司规定: - 工作日加班:18:00后开始计算 - 周末加班:全天计算

在C列计算:

  1. 实时加班时长(小时,保留1位小数)
  2. 加班费(假设时薪50元)

一、基础练习题答案

练习1:创建动态日期标题

答案

A1单元格公式:
="销售日报(" & TEXT(TODAY(),"yyyy年mm月dd日") & ")"
解释: - TODAY() 获取当天日期 - TEXT(日期,"格式") 将日期转为指定格式的文本 - & 连接文本


练习2:判断产品是否过期

答案

D2单元格公式(向下填充):
=IF(TODAY()>B2+C2,"已过期",
    IF(TODAY()>=B2+C2-3,"即将过期","正常"))

分步解释: 1. B2+C2:生产日期 + 保质期天数 = 过期日期 2. TODAY()>B2+C2:如果今天 > 过期日期 → 已过期 3. TODAY()>=B2+C2-3:如果今天 ≥ 过期日期前3天 → 即将过期 4. 否则 → 正常

示例结果(假设今天是2026-01-04): - 牛奶:2025-12-25 + 15天 = 2026-01-09 → "正常" - 面包:2025-12-30 + 7天 = 2026-01-06 → "即将过期" - 鸡蛋:2026-01-01 + 30天 = 2026-01-31 → "正常"


练习3:计算项目已进行天数

答案

C2单元格(已进行天数):
=TODAY()-B2

D2单元格(已进行周数):
=INT((TODAY()-B2)/7) & "周"
=INT((TODAY()-B2)/7)

分步解释: 1. TODAY()-B2:今天 - 开始日期 = 已进行天数 2. INT(天数/7):天数 ÷ 7,取整数部分 = 完整周数

示例结果(假设今天是2026-01-04): - 官网开发:2025-11-01开始 → 64天,9周 - 移动端APP:2025-12-15开始 → 20天,2周 - 数据库升级:2026-01-01开始 → 3天,0周


二、中级练习题答案

练习4:会议倒计时系统

答案

D2单元格(状态列):
=IF(NOW()>B2,"进行中",
    IF(NOW()>B2-"0:30","即将开始",
        INT(B2-NOW())&"天"&TEXT((B2-NOW()-INT(B2-NOW()))*24,"0")&"小时"))

E2单元格(倒计时分钟数):
=IF(B2>NOW(), INT((B2-NOW())*1440), "")

分步解释

状态列公式: 1. NOW()>B2:如果现在时间 > 会议开始时间 → "进行中" 2. NOW()>B2-"0:30":如果现在时间 > 会议开始前30分钟 → "即将开始" 3. 否则:计算剩余天数和小时 - INT(B2-NOW()):取整数天数 - (B2-NOW()-INT(B2-NOW()))*24:剩余小时的小数部分转为小时数

倒计时分钟公式: - (B2-NOW())*1440:剩余天数 × 24小时 × 60分钟 = 剩余分钟数 - 1440 = 24小时 × 60分钟 - IF(B2>NOW(), ..., ""):只显示会议开始前的倒计时

示例结果(假设现在是2026-01-04 10:00): - 季度总结会(1月10日14:30):"6天4小时",剩余分钟:9166 - 产品评审会(1月5日09:00):"还有1天23小时",剩余分钟:2820 - 技术分享会(1月7日15:00):"还有3天5小时",剩余分钟:4620


练习5:员工生日提醒系统

答案

C2单元格(年龄):
=YEAR(TODAY())-YEAR(B2)-IF(TODAY()<DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)),1,0)

D2单元格(生日提醒):
=IF(TEXT(TODAY(),"mm-dd")=TEXT(B2,"mm-dd"),"🎂今天生日!",
    IF(DATEDIF(TODAY(),DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)),"d")<=7,
        "即将生日(还有"&DATEDIF(TODAY(),DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)),"d")&"天)",""))

分步解释

年龄公式: 1. YEAR(TODAY())-YEAR(B2):今年年份 - 出生年份 2. IF(TODAY()<DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)),1,0): - 如果今天还没到今年的生日,减1岁 - DATE(YEAR(TODAY()),MONTH(B2),DAY(B2)):今年的生日日期

生日提醒公式: 1. TEXT(TODAY(),"mm-dd")=TEXT(B2,"mm-dd"):比较月日是否相同 → 今天生日 2. DATEDIF(TODAY(),今年生日,"d"):今天距离今年生日的天数 3. 如果≤7天 → 即将生日

示例结果(假设今天是2026-01-04): - 张三:1990-05-20 → 年龄35岁,无提醒 - 李四:1992-08-12 → 年龄33岁,无提醒 - 王五:1993-11-05 → 年龄32岁,无提醒 如果今天是5月20日,张三显示:"🎂今天生日!"


练习6:工时计算器

答案

C2单元格(实时加班时长):
=IF(WEEKDAY(B2,2)<6,  // 判断是否是工作日(周一到周五)
    IF(TIME(HOUR(B2),MINUTE(B2),SECOND(B2))>TIME(18,0,0),
        (NOW()-B2)*24,
        IF(NOW()>B2+TIME(18,0,0)-TIME(HOUR(B2),MINUTE(B2),SECOND(B2)),
            (NOW()-(INT(B2)+TIME(18,0,0)))*24,
            0)),
    (NOW()-B2)*24)  // 周末全天计算

D2单元格(加班费):
=ROUND(C2*50,1)

简化版本(如果B列已经是完整日期时间):

C2单元格:
=IF(WEEKDAY(B2,2)<6,  // 工作日
    MAX(0,(NOW()-MAX(B2,INT(B2)+18/24))*24),  // 18点后开始计算
    (NOW()-B2)*24)  // 周末

分步解释: 1. WEEKDAY(B2,2)<6:判断是否是工作日(周一到周五) 2. 工作日情况: - 如果开始时间>18:00:直接计算(NOW()-B2)*24 - 如果现在时间>当天18:00:从18:00开始计算加班 - 否则:0小时(还没到加班时间) 3. 周末情况:全天都算加班 4. ROUND(小时数*50,1):计算加班费,保留1位小数

示例结果(假设现在是2026-01-04 20:30): - 张三:1月3日18:30开始 → 26.0小时,加班费1300元 - 李四:1月3日19:00开始 → 25.5小时,加班费1275元 - 王五:1月4日17:45开始 → 2.8小时,加班费140元


三、实用技巧总结

1. TODAY() vs NOW() 选择

  • 只关心日期:用 TODAY()
  • 需要精确时间:用 NOW()

2. 常见错误避免

  • 单元格格式问题:数字显示为日期 → 设置格式为"常规"
  • 实时更新:按F9手动刷新计算

3. 性能优化

  • 大量数据时,考虑将NOW()转换为静态值
  • 使用TODAY()代替NOW()如果不需要时间部分

4. 日期计算技巧

  • 天数差:直接相减
  • 工作日计算:NETWORKDAYS()
  • 精确时间差:(结束-开始)*24(小时)或*1440(分钟)