乐于分享
好东西不私藏

Excel函数——日期与时间函数

Excel函数——日期与时间函数

Excel函数是数据处理的核心引擎,掌握它能让工作效率实现质的飞跃。本文将由里及表、由浅入深,从日期与时间的存储机制到常用函数,再到综合案例,带你深入了解Excel日期与时间函数。


01 Excel中日期和时间的存储机制

序列值

在Excel中,所有的日期和时间都被存储为数字(称为“序列值”或“序列数”),其整数部分代表自指定起点已过的天数,小数部分代表一天中的时间比例。例如,“2000-04-06 12:07:00”在Excel中将被存储为36622.50486111…,这是因为2000年4月6日1900年1月1日以来已过36622天(Excel默认采用1900日期系统),12:07:00是(12*60*60+7*60)/(24*60*60)=0.50486111…天。

序列值的表现形式

序列值有两种表现形式:一种是底层存储形式,即序列值,如36622.50486111…;另一种是表层显示形式,即日期时间格式,如通过应用不同的单元格格式,可以将序列值“改头换面”为表示日期的“2000年04月06日、表示时间的“12:07:00、表示日期和时间的“2000年04月06日12:07:00
一旦了解了Excel中日期和时间的存储机制,日常操作里诸多令人费解的现象,便会如拨云见日般豁然开朗。比如说,为什么用文本连接符“&”合并日期和时间后会得到一串莫名其妙的数字?为什么日期时间越晚其值越大?为什么日期和时间能够进行加减运算,时间间隔又是如何计算的?为什么YEAR、MONTH等日期时间函数会无缘无故返回“#VALUE!”或“#NUM!”?为什么筛选或排序日期的结果混乱不堪?为什么VLOOKUP、SUMIF等函数匹配不到指定的日期?
前者是因为日期和时间的底层存储形式是序列值,对一个序列值进行加减运算可以得到另一个序列值,两个序列值相减可以得到时间间隔;后者是因为日期和时间的表层显示形式有很多,其既可以显露真容为数字,又可以改头换面成任何一种日期时间格式,并且善于伪装的文本型日期常以相同的格式以假乱真,上演一出“真假美猴王”的闹剧——正是这种“撞脸”现象导致了计算、排序、查找中的种种异常。
02 基础构建与运算函数
获取当前日期和时间
=TODAY() '返回当前日期的序列值(动态更新)=NOW() '返回当前日期和时间的序列值(动态更新)
TODAY函数与NOW函数是两个非常常用的不需要任何参数的日期和时间函数,它们的主要作用都是返回系统当前的日期和时间,但两者在精确度上有明显的区别——TODAY函数会动态更新为当天的日期,但时间部分默认为0:00;NOW函数会动态更新为当前的精确时刻。
需要注意的是,TODAY函数和NOW函数都是易失性函数,这意味着每当编辑工作簿中的任意单元格,或者打开工作簿时,其都会自动重新计算,如果不需要动态更新,请使用快捷键“CTRL+;”或“CTRL+SHIFT+;”插入静态的日期或时间。
日期和时间的拆分与组合
=YEAR(序列值serial_number) '返回对应于某个日期的年份(1900-9999之间的整数)=MONTH(序列值serial_number) '返回日期中的月份(1-12之间的整数)=DAY(序列值serial_number) '返回日期中的天数(1-31之间的整数)=HOUR(序列值serial_number) '返回时间值的小时数(0-23之间的整数)=MINUTE(序列值serial_number) '返回时间值中的分钟(0-59之间的整数)=SECOND(序列值serial_number) '返回时间值的秒数(0-59之间的整数)=DATE(年year,月month,日day'返回表示特定日期的序列值=TIME(时hour,分minute,秒second) '返回表示特定时间的十进制数字(00.99988426之间的小数)
在某些场景下,为了对庞大复杂的日期时间数据进行更灵活的分析、计算和筛选,往往需要将标准化日期时间拆解到最小粒度或将分散的信息组合成标准化日期时间。只有这样,我们才能深入挖掘海量数据背后隐藏的信息和规律。通过YEAR/MONTH/DAY函数可以将标准化日期拆分为年/月/日,通过HOUR/MINUTE/SECOND函数则可以将标准化时间拆分为时/分/秒;而DATE函数和TIME函数则可以将分散的年/月/日时/分/秒组合成一个标准化日期/时间。借助这些函数,我们可以按不同的时间维度对数据进行切片和钻取,从而实现更精细化的数据洞察。
需要注意的是,拆分函数的参数非常灵活,既可以是日期时间对应的序列值,也可以是Excel可识别的文本型日期时间,还可以是储存了上述两类数据的单元格引用,或是返回它们的其他函数;而与之相对的组合函数,其参数只能是数字——可以是直接输入的数字、包含数字的单元格引用,或是返回数字的其他函数。
日期计算与偏移
=EDATE(开始日期start_date,月份数months) '返回表示某个日期的序列值,该日期与指定日期相隔(之前或之后)指示的月份数=EOMONTH(开始日期start_date,月份数months) '返回某个月份最后一天的序列值=WORKDAY(开始日期start_date,工作日天数days,[假日holidays]) '返回在起始日期之前或之后、与该日期相隔指定工作日(不包括周末和专门指定的假日)的某一日期的序列值 
EDATE函数是用于按月偏移日期的函数,核心作用是根据指定的开始日期返回指定月份之前或之后的同一天日期。在实际应用中,EDATE函数广泛应用于需要保持固定月份间隔的场景,如计算合同或会员到期日、财务还款计划、员工转正提醒、产品保质期截止日以及动态生成周期性报告日期等。
需要注意的是,若开始日期是某月的最后一天,如1月31日,而目标月份没有对应的日期,EDATE函数会自动返回目标月份的最后一天,如2月28日(EDATE函数会自动处理不同月份天数差异及闰年等情况)。此外,若第二参数“月份数”为非整数,EDATE函数会自动截尾取整,例如,“=EDATE(“2000-04-06”,1.9)”实际等价于“=EDATE(“2000-04-06”,1)”。
EOMONTH函数是用于按月偏移返回月末日期的函数,核心作用是根据指定的开始日期返回指定月份之前或之后的某个月份的最后一天日期,广泛应用于账单和报告截止日、员工考勤周期统计、财务报表月结、项目管理和里程碑跟踪等需要周期性月末日期的场景。
WORKDAY函数是用于按工作日(排除周末和节假日)进行日期偏移的函数,核心作用是根据指定的开始日期返回指定工作日之前或之后的日期,广泛应用于项目任务排期、电商承诺交付日、财务付款截止日和物流时效预测等各类需要基于工作日计算工期或截止日期的场景。
03 格式转换与高级分析函数

格式转换

=DATEVALUE(文本型日期date_text) '将存储为文本的日期转换为序列值=TIMEVALUE(文本型时间time_text) '返回由文本字符串表示的时间的十进制数字(0到0.99988426之间的小数)

在实际工作中,经常会遇到从外部系统导入的日期时间数据以文本形式存储,如“2000-04-06”或“12:07:00”。这类数据虽然看起来像日期或时间,但在Excel中实际被识别为普通字符串,无法直接参与日期时间计算、排序、筛选,也无法与日期时间函数配合使用。此时,就需要借助DATEVALUE函数和TIMEVALUE函数,将文本型日期和时间转换为Excel内部可识别的日期序列值和时间小数部分,从而为后续的数据分析、图表制作和复杂计算奠定基础。

需要注意的是,作为参数的文本型日期和时间需要符合Excel的识别规则,若文本格式完全不符,如“2000.04.06”或“十二点零七分”,DATEVALUE函数和TIMEVALUE函数会返回错误“#VALUE!”,此时需视情形对参数进行预处理,如使用SUBSTITUTE函数将“2000.04.06”中的点“.”替换为短横杠“-”

区间分析

=DAYS(结束日期end_date,开始日期start_date) '返回两个日期之间的天数=DAYS360(开始日期start_date,结束日期end_date,[计算模式method]) '返回两个日期之间的天数(每个月以30天计,一年共计12个月)=NETWORKDAYS(开始日期start_date,结束日期end_date,[假日holidays]) '返回两个日期之间的工作日(不包括周末和专门指定的假日)天数=NETWORKDAYS.INTL(开始日期start_date,结束日期end_date,[周末日weekend],[假日holidays]) '返回两个日期之间的工作日(不包括专门指定周末日和假日)天数

DAYS函数用于直接计算两个日期之间相差的实际天数,其不区分周末和节假日,完全按照日历上的实际天数进行减法运算;DAYS函数则采用财务和会计领域常用的一年360天(每月30天)的规则来计算两个日期之间相差的天数,其会将不同月份的实际长度统一折算,使得每个月的天数标准化,从而方便利息、租金、贴现期等金融指标的计算。

NETWORKDAYS函数用于计算两个日期之间的工作日天数,其默认以周六和周日为周末,自动排除这些非工作日,并且允许用户额外指定一个包含法定节假日的区域,将这些日期也从工作日中剔除。该函数在计算项目实际工时、人员考勤、任务排期、供应链交付周期等场景中非常实用,因为其只统计员工或系统正常工作的天数,能够更准确地反映真实的工作耗时。

NETWORKDAYS.INTL函数是NETWORKDAYS函数的增强版,其与后者最大的区别在于可以自定义周末的设置,用户可以通过数字代码或字符串来指定哪几天算作周末,例如某些国家或地区以周五和周六为周末,或者企业实行周日单休、大小周等特殊排班制度,都可以通过这个函数灵活适配。因此,NETWORKDAYS.INTL函数适用于企业个性化排班管理,以及任何需要根据非标准周末来精确计算工作日的场景。

NETWORKDAYS.INTL函数weekend参数
数字代码
周末日
1或省略
星期六、星期日
2
星期日、星期一
11
仅星期日
17
仅星期六

周期定位

=WEEKDAY(序列值serial_number,[返回值类型return_type]) '返回对应于某个日期的一周中的第几天。 =WEEKNUM(序列值serial_number,[返回值类型return_type]) '返回指定日期在该年中所处的周数

WEEKDAY函数和WEEKNUM函数是用于日期星期和周次分析的核心函数——前者返回一个日期在星期中的第几天,另一个返回一个日期在一年中所处的周数。通过合理使用这两个函数,可以轻松实现按星期或按周的数据聚合、条件判断和可视化分析。

需要注意的是,WEEKDAY函数和WEEKNUM函数的第二个参数虽然都是可选参数,但“省略”和“1”均意味着函数在执行时,默认一周的第一天为星期日(对应数字1),最后一天为星期六(对应数字7),而参数“2”才意味着函数在执行时默认一周的第一天为星期一(对应数字1),最后一天为星期日(对应数字7)。这一差异在判断周末、按周统计时尤为关键。因此,为符合国内工作习惯,在使用这两个函数时应明确指定第二个参数为“2”。

04 日期与时间函数的应用案例

应用场景:某食品企业主营多种保质期产品,库存管理面临严格的时效性要求。每批产品入库时均记录生产日期和保质期月数,系统需要据此自动计算出每个产品的保质期截止日(DATEVALUE/EDATE函数),并实时跟踪当前日期与该截止日之间的剩余自然天数(DAYS/TODAY函数),以便及时发现即将过期或已过期的产品。同时,由于实际运营中涉及生产排期、配送调度和促销安排,企业还需要了解在剩余时间内有多少个工作日(NETWORKDAYS函数),从而更精准地制定处置策略。采购部门则希望根据产品的生产周期和节假日安排,自动推算出最迟的采购下单日期(WORKDAY函数),确保在下一个生产周期开始前有足够的库存。其中,下一生产日期设定为下一月的月末(EOMONTH函数),建议补货日则为该生产日期前7个工作日,以保证备货时间充足并合理避开节假日影响。


本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » Excel函数——日期与时间函数

猜你喜欢

  • 暂无文章