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

如何用JavaScript将对象数组中dddd hh:min格式时间转为分钟并返回数组

时间格式转总分钟数的实现方案

问题说明

现有一个对象数组,其中time属性格式为dddd hh:min(dddd为4位天数、hh为2位小时、min为2位分钟),需要将该属性转换为总分钟数并返回新的对象数组。用户尝试的代码返回结果不符合预期,以下是修正方案和更优实现。

原代码问题分析

  • 字符串未转数字:splitMin直接使用了字符串值,导致计算时变成字符串拼接而非数值相加,比如1440 + 180 + '40'会得到"162040"而非正确的1660
  • 未构建目标数组:循环仅打印结果,没有生成包含转换后对象的新数组
  • 不必要的this调用:全局环境下直接调用convertToMinutes即可,无需this

修正后的代码

var arrobj=[
  {id:1, time: '0001 03:40'},
  {id:2, time: '0016 10:20'},
  {id:3, time: '1014 12:04'},
  {id:4, time: '0412 01:01'},
]

function convertToMinutes(value) {
  var splitTime = value.split(' ');
  // 天数转分钟,自动转数字
  var dayToMinutes = splitTime[0] * 1440;
  var splitHrMin = splitTime[1].split(':');
  // 小时转分钟
  var splitHr = splitHrMin[0] * 60;
  // 分钟转数字
  var splitMin = Number(splitHrMin[1]);
  var timeInMinutes = dayToMinutes + splitHr + splitMin;
  // 转成字符串返回,匹配期望输出格式
  return String(timeInMinutes);
}

// 构建新数组
var resultArr = [];
for(let item of arrobj) {
  resultArr.push({
    id: item.id,
    time: convertToMinutes(item.time)
  });
}

console.log(resultArr);

更优实现(使用数组map方法)

利用Array.prototype.map可以更简洁地生成新数组,同时结合解构和正则提取数据:

const arrobj = [
  {id:1, time: '0001 03:40'},
  {id:2, time: '0016 10:20'},
  {id:3, time: '1014 12:04'},
  {id:4, time: '0412 01:01'},
];

const convertArr = arrobj.map(item => {
  // 正则匹配天数、小时、分钟
  const [, days, hours, mins] = item.time.match(/(\d{4}) (\d{2}):(\d{2})/);
  const totalMins = days * 1440 + hours * 60 + Number(mins);
  return {
    ...item,
    time: String(totalMins)
  };
});

console.log(convertArr);

输出结果

运行上述代码后,将得到符合预期的输出:

[
  {id:1, time: '1660'},
  {id:2, time: '23660'},
  {id:3, time: '1460884'},
  {id:4, time: '593341'},
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:40:25