PHP计算营业时间内停机分钟数 超过24小时后数值从0重置问题
营业时段跨天停机时长计算问题修复
问题根源
代码核心计算逻辑没有问题,错误出在最终秒数转分钟的步骤:gmdate('H', $downTime) 函数返回的小时数范围固定为0~23,当日长超过24小时时,会自动对24取模,比如25小时对应的秒数传入后只会返回1,自然就会出现超过24小时后计算结果重新计数的问题。
修复方案
直接将累计的总秒数除以60取整即可得到正确的总分钟数,不需要使用gmdate做日期格式化:
// 替换原来的 $downTime 转换代码即可 $downTime = intval($downTime / 60);
用你给出的测试用例验证:累计停机总秒数为1500*60=90000,除以60后直接得到1500,完全符合预期输出。
可选优化建议
现有代码里大量重复的营业时段计算逻辑可以抽成公共函数,减少冗余代码,也能降低后续维护的出错概率:比如可以写一个getBizTimeByDate($date, $bhStartTime, $bhEndTime) 函数,传入日期直接返回当日营业开始、结束的时间戳,不用每次重复写explode、setTime的逻辑。
内容的提问来源于stack exchange,提问作者Adam Fiqrie Putra
相关产品推荐
相关产品推荐

