发布日期:2026-06-11 浏览次数:2
日期和时间,是WPS表格中最常见但也最容易被"绕晕"的数据类型。
你做过这样的操作吗?两个日期相减,得到的不是"相差多少天",而是一个奇怪的小数。明明输入的是"2026/6/11",显示出来的却是"45453"(这是日期的序列值)。计算员工工龄时,用"当前日期减去入职日期"得到的结果是年数还是不精确的天数?一个上午8:30打卡、下午6:15打卡,要计算出实际工作小时数——直接相减得到的是一个看起来不对的小数。
这些困惑的根源在于:WPS表格中的日期和时间,本质上都是数字。 日期是"从1900年1月1日到目标日期经过的天数"(序列值),时间是"一天24小时的小数部分"。理解了这一点,日期时间计算就不再神秘。
WPS表格提供了丰富的日期时间函数——从基础的YEAR、MONTH、DAY到强大的DATEDIF、NETWORKDAYS、WORKDAY、EDATE、EOMONTH等——覆盖了日期计算的所有常见需求。本文将从日期函数的基本概念出发,结合考勤统计、项目倒计时、到期提醒、工龄计算等实战场景,系统讲解这些函数的使用方法。
在WPS表格中,每个日期都对应一个唯一的"序列号"——从1900年1月1日(序列值1)开始,每过一天,序列值加1。
这意味着:日期之间可以直接进行加减运算——因为本质上就是数字的加减。
结果是29(6月1日到6月30日相差29天,不包含起始日期本身)。如果包含第一天,结果需要+1。日期直接相减得到的是相隔"完整天数"。
时间在WPS表格中是小数的形式。
一个完整的"日期时间"值,就是"整数部分(日期)+小数部分(时间)":2026/6/11 14:30 的序列值≈46092 + 0.6042。
无论单元格显示为"2026年6月11日"还是"2026/06/11",编辑栏中的实际值都是序列值(46092)。不要因为单元格显示了日期格式就认为"它是一个日期"——它的本质还是一个数字。将单元格格式从"日期"改为"常规",你就能看到它的序列值"真面目"。
返回当前日期(不含时间)。每次打开或重新计算时自动更新。
返回当前日期和时间。
区别: TODAY返回日期序列值的整数部分,NOW返回包含时间小数的完整序列值。如果只需要日期(如考勤打卡日期),用TODAY;如果需要精确时间(如任务最后修改时间),用NOW。
WEEKDAY的"返回类型"参数:
| 类型值 | 含义 | 示例(2026/6/11,周四) |
|---|---|---|
| 1(默认) | 星期日=1,星期六=7 | 5 |
| 2 | 星期一=1,星期日=7 | 4 |
| 3 | 星期一=0,星期日=6 | 3 |
推荐使用类型2——星期一=1,更符合中国人的工作周习惯。
如果希望显示"星期四"而非数字:
返回"星期四"(完整中文星期名称)。
返回"四"(缩写中文星期名称)。
=DATE(2026, 6, 11) → 2026/6/11。=DATE(2026, 14, 1) → 2027/2/1。这个特性在"计算某个月的最后一天"时非常有用——例如获取2026年2月的最后一天:
月份设为3,日设为0——表示"3月0日",即2月的最后一天(2026/2/28)。这是一种非常简洁的月末日期获取方式。
DATEDIF是一个"隐藏函数"——在WPS表格的函数列表中可能不会显示,但可以直接在公式中使用。
单位参数:
| 单位 | 含义 | 示例(2024/6/11→2026/6/11) |
|---|---|---|
| "Y" | 整年数 | 2 |
| "M" | 整月数 | 24 |
| "D" | 整天数 | 730 |
| "YD" | 不考虑年份的天数差 | 0 |
| "YM" | 不考虑年份的月数差 | 0 |
| "MD" | 不考虑月份的日数差 | 0 |
计算员工工龄(精确到年):
计算员工工龄(精确到年月日):
计算项目已进行天数:
计算距离合同到期的剩余天数:
(日期直接相减,得到整数天数差。如果不包含到期日当天,结果后+1)
不要"总是"用DATEDIF——最简单的场景:计算两个日期之间相隔多少天,直接用减法即可。
结果=相隔的天数。如果结束日期=2026/6/30,开始日期=2026/6/1,结果是29(天)。
但如果需要"6月1日到6月30日一共包含30天"(包含头尾),需要=结束日期 - 开始日期 + 1。
日期直接相减得到的是两个日期间隔的"完整天数",不包含结束日期的当天。这一点在考勤统计中容易造成"少算一天"的误差,需要留意。
示例: 计算2026年6月的工作日天数(假设法定节假日列表在H2:H10):
如果周末不是周六和周日(如某些公司的休息日是周五和周六):
第三个参数(周末类型)的取值:
示例: 项目从2026/6/1开始,需要在15个工作日后提交,提交日期是:
倒推: 如果需要计算"结束日期之前的N个工作日",天数为负数:
打卡时间为"8:30"和"18:15",计算实际工作小时数:
如果午休时间为1小时(12:00~13:00),净工时:
上班时间为9:00,如果打卡时间晚于9:00为迟到:
如果要计算迟到分钟数:
下班时间为18:00,之后的时间算加班。加班超过30分钟起算:
如果需要"不足30分钟不计算":
假设员工每天一条考勤记录:
使用条件格式为即将到期的任务设置颜色标记:
=$A2-TODAY()<0。=AND($A2-TODAY()>=0, $A2-TODAY()<=3)。[h]"小时"m"分钟"——显示剩余的小时和分钟。更好的可视化方式——显示为文字:
在项目管理中,常用的里程碑日期计算:
=WORKDAY(开始日期, 预计工作日数, 法定节假日)。=DATEDIF(里程碑1, 里程碑2, "D")。=里程碑日期 - TODAY()。示例:
=EOMONTH(DATE(2026,6,11), 0) → 2026/6/30(6月的最后一天)。=EOMONTH(DATE(2026,6,11), 1) → 2026/7/31(7月的最后一天)。=EOMONTH(DATE(2026,6,11), -1) → 2026/5/31(5月的最后一天)。应用场景: 计算月度报表的截止日期、计算工资的计薪周期结束日。
示例:
=EDATE(DATE(2026,6,11), 12) → 2027/6/11。=EDATE(入职日期, 3) - 1(如果入职当天算第一天)。示例: 某员工在2026年6月11日入职到2026年12月31日的年资占比:
在计算不足一年的员工年假比例时非常实用。
=TIME(14, 30, 0) → 14:30。=TIME(9, 0, 0) → 9:00。在考勤计算中,TIME函数比写字符串更可靠(不受系统日期格式影响)。
字段设计:
=IF(B2<>"", (C2-B2)*24-1, 0)(净工时,自动排除午休1小时)。=IF(B2>TIME(9,0,0), "迟到", "")。=IF(C2>TIME(18,0,0), (C2-TIME(18,0,0))*24, 0)(加班小时数)。汇总行:
=NETWORKDAYS(月初, 月末, 法定节假日)。=COUNTIF(B:B, "<>") - 1(约去除表头)。=COUNTIF(E:E, "迟到")。=SUM(F:F)。字段设计:
=DATEDIF(C2, D2, "D")(计划工期)。=D2-TODAY()(剩余天数)。=IF(F2<0, "已逾期", IF(F2<=3, "紧急", IF(F2<=7, "即将到期", "正常")))(状态标识)。=NETWORKDAYS(TODAY(), D2)(剩余工作日)。条件格式: 对G列设置条件格式——"已逾期"红色填充、"紧急"黄色填充。
=C2-TODAY()(距到期天数)。=IF(D2<0, "已过期", IF(D2<=30, "即将到期(30天内)", "正常"))。=DATEDIF(B2, TODAY(), "Y")(工龄,整年)。=IF(C2>=1, MIN(C2*100, 500), 0)。原因: 单元格格式被设置为"常规"或"数值",而不是"日期"。
解决: 选中单元格→Ctrl+1→"数字"→"日期"→选择你需要的日期格式。
原因: 两个时间相减得到的是"天"的小数位(如0.4天),不是小时数。
解决: 将时间差乘以24——=(B2-A2)*24——结果即为小时数(如9.5小时)。如果要显示为"小时:分钟"格式,直接将单元格格式设置为[h]:mm。
在NETWORKDAYS函数中使用节假日区域时,确保节假日区域中的日期是真正的日期序列值(而非文本)。输入2026/1/1时还要确认单元格是日期格式,而非被识别为文本。
不要手动输入"2026/6/11"这样的文本字符串。始终使用DATE函数或从其他日期单元格引用——这样可以避免格式问题和计算错误,也便于后续用其他函数进行运算。
在做项目计划或考勤表时,提前在Excel中建立一个清晰的时间轴——开始日期、结束日期、里程碑日期,使用DATE函数统一管理。后续所有日期计算都基于这些基准日期。
对于重要的日期(如法定节假日列表、合同开始日期),使用"公式"→"定义名称"为其命名。这样在公式中使用时(如NETWORKDAYS(A2, B2, 法定节假日))更加直观,也便于在多个公式中统一引用。
WPS表格中的日期与时间函数,是数据处理中"必须掌握"的基础能力。理解了"日期是数字、时间是小数"这一本质后,日期时间计算就不再神秘。DATE函数建立日期、DATEDIF计算差值、NETWORKDAYS统计工作日、WORKDAY推算截止日期、EOMONTH获取月末——这些函数的组合使用,可以覆盖从考勤统计到项目倒计时的几乎所有场景。
最重要的不是记住每一个函数的语法——而是在需要"处理日期"时,能够清晰地知道应该使用哪个函数来解决当前的问题。
没有相关标签