You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求Excel计算公式:指定时间跨度内落入每日班次的总时长

计算给定时间跨度内跨天固定班次的总时长

我经常碰到这种跨午夜的班次时长计算需求,确实容易绕晕——毕竟班次从当天20:00延伸到次日05:00,没法直接用常规的时间段重叠公式。下面给你一个通用的Excel公式,搭配详细的逻辑拆解,帮你快速搞定问题。

核心思路

我们把整个时间跨度拆成3个独立部分计算,最后求和:

  • 起始日期当天,落入班次(20:00-24:00)的时长
  • 结束日期当天,落入班次(00:00-05:00)的时长
  • 中间完整天数,每天固定贡献9小时(20:00到次日05:00的总时长)

通用公式

假设你的起始时间存在单元格A1,结束时间在B1,直接复制以下公式到目标单元格即可:

=MAX(0, MIN(INT(A1)+1, B1) - MAX(A1, INT(A1)+TIME(20,0,0))) + 
 MAX(0, MIN(B1, INT(B1)+TIME(5,0,0)) - INT(B1)) + 
 MAX(0, INT(B1)-INT(A1)-1)*TIME(9,0,0)

提示:如果需要以纯小时数显示结果,记得把单元格格式设置为「常规」或「数值」,而非默认的时间格式。

公式各部分拆解(附示例验证)

用你提供的示例数据(A1=2018/04/04 00:12:53B1=2018/04/16 13:24:04)来逐个解释:

  1. 起始日班次时长

    MAX(0, MIN(INT(A1)+1, B1) - MAX(A1, INT(A1)+TIME(20,0,0)))
    
    • INT(A1)+1 代表起始日的24:00(即次日00:00)
    • MAX(A1, INT(A1)+TIME(20,0,0)) 取「起始时间」和「当日班次开始时间20:00」中较晚的那个
    • 两者相减得到重叠时长,MAX(0,...)确保不会出现负数(比如起始时间在24:00之后的极端情况)
    • 示例中这部分结果是4小时(20:00到24:00)
  2. 结束日班次时长

    MAX(0, MIN(B1, INT(B1)+TIME(5,0,0)) - INT(B1))
    
    • INT(B1)+TIME(5,0,0) 代表结束日的05:00
    • MIN(B1, ...) 取「结束时间」和「当日班次结束时间05:00」中较早的那个
    • 减去结束日的00:00(INT(B1))得到重叠时长,同样用MAX(0,...)避免负数
    • 示例中这部分结果是5小时(00:00到05:00)
  3. 中间完整天数的总时长

    MAX(0, INT(B1)-INT(A1)-1)*TIME(9,0,0)
    
    • INT(B1)-INT(A1)-1 计算起始日和结束日之间的完整天数(示例中是16-4-1=11天)
    • 乘以每天的班次时长9小时,MAX(0,...)确保没有中间天数时结果为0
    • 示例中这部分结果是11*9=99小时

最终结果验证

把三部分相加:4+5+99=108小时,也就是4.5天(108÷24),和实际情况完全吻合。

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

火山引擎 最新活动