You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带时分的起始日期与小时时长下,排除周末的结束日期计算方法及公式有效性咨询

带时分的起始日期与小时时长下,排除周末的结束日期计算方法及公式有效性咨询

嘿,你的思路其实已经摸到门道了,但咱们得仔细聊聊这个公式的潜在问题,以及更稳妥的替代方案~

先看你写的公式:
=WORKDAY(INT(G20),INT(H20/24))+(MOD(G20,1)+MOD(H20/24,1))

这个公式的逻辑是把日期部分和时间部分拆分处理:

  • 用INT(G20)提取起始日期的整数部分,INT(H20/24)把小时转换成完整的天数,再用WORKDAY跳过周末计算出基础结束日期
  • 然后把起始时间(MOD(G20,1))和剩余小时转成的时间(MOD(H20/24,1))相加,补回时间部分

这个方法在大部分简单场景下是有效的,但有个关键漏洞:如果时间部分相加后超过24小时,进位的天数不会经过WORKDAY的周末校验。举个例子:

假设起始时间是周五20:00(G20=2024/5/24 20:00),时长是8小时(H20=8)
你的公式会计算:WORKDAY(2024/5/24, 0)得到周五,时间部分20:00+8h=4:00,最终返回2024/5/25 4:00(周六,属于周末)
但实际需求应该是跳过周末,返回2024/5/27 4:00(周一)

那怎么解决这个问题呢?推荐你用更连贯的逻辑:先算出包含周末的完整结束日期时间,再自动跳过其中的周末天数。可以用下面这个公式(Excel 365/2021及以上版本支持LET函数,可读性更好):

=LET(
    起始时间, G20,
    总小时数, H20,
    临时结束时间, 起始时间 + 总小时数/24,
    周末天数, NETWORKDAYS.INTL(INT(起始时间), INT(临时结束时间), "0000011") - (INT(临时结束时间) - INT(起始时间) + 1),
    最终结束时间, 临时结束时间 + 周末天数
)

如果是旧版Excel,也可以把公式展开写:

=G20+H20/24 + (NETWORKDAYS.INTL(INT(G20),INT(G20+H20/24),"0000011") - (INT(G20+H20/24)-INT(G20)+1))

这个公式的逻辑是:

  1. 先算出不考虑周末的临时结束时间(起始时间 + 总小时数/24)
  2. 用NETWORKDAYS.INTL计算起始日期到临时结束日期之间的工作日数量,再用总天数减去工作日数量,得到这段时间内的周末天数
  3. 把临时结束时间加上周末天数,就自动跳过了所有周末,得到正确的工作日结束时间

另外补充一点:如果你的工作日定义不是默认的周一到周五,可以修改NETWORKDAYS.INTL里的"0000011"参数——这个字符串的每一位代表一周的一天,0是工作日,1是非工作日,从周一到周日排列。比如如果你周日也是工作日,就改成"0000001"。

总结一下:你的原始公式在时间部分不跨天的情况下是可用的,但跨天且遇到周末时会出错;上面的公式能覆盖所有场景,更靠谱~

备注:内容来源于stack exchange,提问作者Mayukh Bhattacharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 14:33:16