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

如何将形如4d 5hours 8mins的时长转换为秒?(JS实现)

时长转秒的JS实现方案

针对你需要把各种格式的时长字符串转换成总秒数的需求,这里给你一个简单易懂的JS实现,适配你提到的各种单位写法(比如4d/4 days/4days都能处理):

核心思路

  1. 用正则表达式提取字符串里的数字+单位组合,不管数字和单位之间有没有空格
  2. 建立单位和秒数的映射表,把不同写法的同一单位统一对应到秒数
  3. 遍历所有提取到的内容,累加计算总秒数

完整代码

function durationToSeconds(input) {
  // 单位到秒数的映射,覆盖各种常见写法
  const unitSecondsMap = {
    d: 86400,
    day: 86400,
    days: 86400,
    h: 3600,
    hour: 3600,
    hours: 3600,
    min: 60,
    mins: 60,
    minute: 60,
    minutes: 60
  };

  // 正则匹配:数字 + 可选空格 + 单位,忽略大小写
  const durationRegex = /(\d+)\s*([a-z]+)/gi;
  let matchResult;
  let totalSeconds = 0;

  // 遍历所有匹配到的时长片段
  while ((matchResult = durationRegex.exec(input)) !== null) {
    // 提取数字并转成整数
    const amount = parseInt(matchResult[1], 10);
    // 单位转小写,避免大小写差异影响匹配
    const unit = matchResult[2].toLowerCase();

    // 如果是已知单位,就累加对应的秒数
    if (unitSecondsMap[unit]) {
      totalSeconds += amount * unitSecondsMap[unit];
    } else {
      // 遇到未知单位时给出提示(新手可以删掉这行,或者保留用来排错)
      console.warn(`没识别到单位:${unit},这部分时长会被忽略`);
    }
  }

  return totalSeconds;
}

测试用例

你可以直接调用这个函数测试:

// 测试你给的例子
console.log(durationToSeconds("4d 5hours 8mins")); // 输出 364080

// 其他格式也能处理
console.log(durationToSeconds("2days 3h 10minutes")); // 输出 184200
console.log(durationToSeconds("1day2h30mins")); // 输出 95400

关键部分解释

  • 正则表达式:/(\d+)\s*([a-z]+)/gi 专门用来抓取数字和单位的组合,\d+ 匹配数字,\s* 允许数字和单位之间有0个或多个空格,[a-z]+ 匹配单位字母,g 表示全局匹配所有片段,i 表示忽略大小写(比如Hours和hours都能识别)
  • 单位映射表:把同一个时间单位的不同写法(比如min/mins/minute)都对应到相同的秒数,避免重复判断
  • 累加计算:每次匹配到一个片段,就把数字乘以对应单位的秒数,加到总秒数里

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:25:09