求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:53,B1=2018/04/16 13:24:04)来逐个解释:
起始日班次时长:
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)
结束日班次时长:
MAX(0, MIN(B1, INT(B1)+TIME(5,0,0)) - INT(B1))INT(B1)+TIME(5,0,0)代表结束日的05:00MIN(B1, ...)取「结束时间」和「当日班次结束时间05:00」中较早的那个- 减去结束日的00:00(
INT(B1))得到重叠时长,同样用MAX(0,...)避免负数 - 示例中这部分结果是5小时(00:00到05:00)
中间完整天数的总时长:
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




