跳到主要内容

date

一、日期函数完整对比表​

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

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

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

三、提取函数示例对比​

原始日期YEAR()MONTH()DAY()星期几(扩展)
2024/3/1520243155(星期五)
2023/12/31202312317(星期日)
2024/2/2920242294(星期四)
1900/1/11900111(星期一)

四、日期计算常见需求​

需求公式示例说明
计算年龄=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()转换文本<br>``=DATEVALUE("2024-03-15")
显示为数字单元格格式不对设置单元格格式为日期
TODAY()不更新手动计算模式按F9刷新或设置自动计算
年份显示1900年份为0检查year参数是否为空或0
月份显示错误month为0或负数理解进位规则,使用正数月份
DAY()返回0day参数为0=DATE(2024,3,0)返回2月最后一天

七、日期序列值说明​

概念值说明
日期基准11900年1月1日 = 1
时间表示小数12:00:00 = 0.5<br>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-151990-05-20=TODAY() - C2
E002李四2016-12-081992-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-151990-05-20=DATE(YEAR(C2), MONTH(C2)+3, DAY(C2))

3.生日月份提醒

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

YEAR()练习​

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

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

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

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

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

员工ID姓名入职日期出生日期年龄计算
E001张三2018-03-151990-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:判断产品是否过期​

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

数据:

ABC
产品名称生产日期保质期(天)
牛奶2025-12-2515
面包2025-12-307
鸡蛋2026-01-0130

要求:

在D列添加"状态"列,判断产品是否过期:

  • 如果过期显示"已过期"
  • 如果3天内过期显示"即将过期"
  • 否则显示"正常"

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

场景:项目进度跟踪

数据:

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

要求:

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

二、中级练习题​

练习4:会议倒计时系统​

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

数据:

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

要求:

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

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

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

数据:

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

要求:

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

练习6:工时计算器​

场景:员工加班时长计算

数据:

AB
员工姓名开始加班时间
张三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(分钟)