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

使用NETWORKDAYS.INTL计算工作日/周末/节假日时长的跨天班次问题

解决跨天班次用NETWORKDAYS.INTL计算时长错误的问题

问题根源

原公式依赖NETWORKDAYS.INTL返回的完整天数乘以单日时长G2,但跨天班次(如21:00至次日02:00)仅覆盖部分天数的时长,直接按完整天数计算会导致结果偏差。

解决方案:拆分跨天时间段计算

需要将跨天班次拆分为「当天剩余时段」、「次日起始时段」和「中间完整天数」三部分,分别判断各时段所属的日期类型(工作日/周末/节假日)后计算对应时长。

1. 工作日时长公式

=IF(INT(B2)=INT(D2),
    // 非跨天:判断当天是否为工作日,计算时段时长
    IF(NETWORKDAYS.INTL(INT(B2),INT(B2),"0000011",$T$2:$T$7)=1, (D2-B2)*24, 0),
    // 跨天:分三部分计算
    (NETWORKDAYS.INTL(INT(B2),INT(B2),"0000011",$T$2:$T$7)* (1-B2+INT(B2))*24) + 
    (NETWORKDAYS.INTL(INT(D2),INT(D2),"0000011",$T$2:$T$7)* (D2-INT(D2))*24) + 
    (NETWORKDAYS.INTL(INT(B2)+1,INT(D2)-1,"0000011",$T$2:$T$7)*G2)
)
  • 逻辑说明:
    • 非跨天:若当天为工作日,计算班次时长;否则返回0。
    • 跨天:计算当天剩余的工作日时长 + 次日起始的工作日时长 + 中间完整工作日的总时长。

2. 周末时长公式

将工作日公式中的周末参数"0000011"替换为"1111100"即可:

=IF(INT(B2)=INT(D2),
    IF(NETWORKDAYS.INTL(INT(B2),INT(B2),"1111100",$T$2:$T$7)=1, (D2-B2)*24, 0),
    (NETWORKDAYS.INTL(INT(B2),INT(B2),"1111100",$T$2:$T$7)* (1-B2+INT(B2))*24) + 
    (NETWORKDAYS.INTL(INT(D2),INT(D2),"1111100",$T$2:$T$7)* (D2-INT(D2))*24) + 
    (NETWORKDAYS.INTL(INT(B2)+1,INT(D2)-1,"1111100",$T$2:$T$7)*G2)
)

3. 节假日时长公式

原公式=SUM(I2-Q2-R2)可保留,但需确保I2为班次总时长(公式:=(D2-B2)*24),Q2为工作日时长,R2为周末时长,逻辑为总时长减去工作日、周末时长,剩余即为节假日时长。

内容的提问来源于stack exchange,提问作者TTVH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:10:37