如何用24小时制计算员工班次时长?函数报错问题求助
班次时长计算函数修正方案
原函数存在两个核心问题:
- 当班次时长为整数小时时(比如8小时),
(y-x)/100得到整数,转字符串后无小数点,split(".")[1]会取到undefined,导致返回格式错误的字符串(如8:undefined) - 跨天班次的分支直接返回数字,没有格式化为统一的"小时:分钟"字符串
修正后的简洁版函数
// 期望输出:0500-1300、1300-2100、2100-0500均返回"8:00" Logger.log(calculate8hours(500, 1300)); // 输出"8:00" Logger.log(calculate8hours(2100, 500)); // 输出"8:00" function calculate8hours(x, y) { // 将输入的时间(如500、1300)转换为当天的总分钟数 const startTotalMins = Math.floor(x / 100) * 60 + x % 100; const endTotalMins = Math.floor(y / 100) * 60 + y % 100; // 计算总时长分钟数,跨天则补24小时的分钟数(1440) const totalDurationMins = endTotalMins > startTotalMins ? endTotalMins - startTotalMins : (1440 - startTotalMins) + endTotalMins; // 转换为小时和分钟,分钟数不足两位时补零 const hours = Math.floor(totalDurationMins / 60); const minutes = totalDurationMins % 60; return `${hours}:${minutes.toString().padStart(2, '0')}`; }
修正说明
- 改用总分钟数计算时长,避免了直接对数字字符串拆分带来的异常情况
- 统一处理当天和跨天班次的逻辑,确保输出格式一致
- 用
padStart(2, '0')保证分钟数始终是两位(比如0分钟时显示为"00")
内容的提问来源于stack exchange,提问作者Borgher
相关产品推荐
相关产品推荐

