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

如何用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')}`;
}

修正说明

  1. 改用总分钟数计算时长,避免了直接对数字字符串拆分带来的异常情况
  2. 统一处理当天和跨天班次的逻辑,确保输出格式一致
  3. 用padStart(2, '0')保证分钟数始终是两位(比如0分钟时显示为"00")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:40:21