You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Node.js中将时长字符串(如3h 23m、2h 25m 15s)转换为Datetime或分钟数?

我来给你分享两个实用的实现方案,分别对应把时长字符串转成分钟数和Datetime类型的需求,都是Node.js环境下可以直接复用的:

方案一:转换为分钟数

这个需求的核心是解析字符串里的小时、分钟、秒,然后换算成统一的分钟单位。我用正则表达式来匹配各个时间部分,然后计算总和:

function convertToMinutes(durationStr) {
  // 匹配所有带h/m/s的数值部分
  const matches = durationStr.match(/(\d+)h|(\d+)m|(\d+)s/g) || [];
  let totalMinutes = 0;

  matches.forEach(match => {
    const value = parseInt(match);
    if (match.endsWith('h')) {
      // 1小时=60分钟
      totalMinutes += value * 60;
    } else if (match.endsWith('m')) {
      totalMinutes += value;
    } else if (match.endsWith('s')) {
      // 秒转分钟,这里保留小数,需要取整的话用Math.floor/round
      totalMinutes += value / 60;
    }
  });

  return totalMinutes;
}

// 测试一下
console.log(convertToMinutes('3h 23m')); // 输出 203
console.log(convertToMinutes('2h 25m 15s')); // 输出 145.25
console.log(convertToMinutes('2h 10m')); // 输出 130

如果你的业务不需要保留秒的小数,可以把秒的处理改成Math.floor(value / 60)或者直接舍去。另外如果要做格式校验,可以在函数开头判断matches.length === 0时抛出错误或者返回0。

方案二:转换为Datetime类型

这里要注意:Datetime是表示具体时间点的,而你的输入是时间段,所以我们需要基于一个基准时间(比如当前时间、或者1970年的起始时间),把时长加到基准时间上得到对应的Datetime。

先写一个转毫秒的工具函数,再基于它生成Datetime:

// 先把时长转成毫秒数
function convertToMilliseconds(durationStr) {
  const matches = durationStr.match(/(\d+)h|(\d+)m|(\d+)s/g) || [];
  let totalMs = 0;

  matches.forEach(match => {
    const value = parseInt(match);
    if (match.endsWith('h')) {
      totalMs += value * 60 * 60 * 1000;
    } else if (match.endsWith('m')) {
      totalMs += value * 60 * 1000;
    } else if (match.endsWith('s')) {
      totalMs += value * 1000;
    }
  });

  return totalMs;
}

// 转换为Datetime,默认基准是1970-01-01T00:00:00
function convertToDatetime(durationStr, baseDate = new Date(0)) {
  const totalMs = convertToMilliseconds(durationStr);
  return new Date(baseDate.getTime() + totalMs);
}

// 测试案例
// 基于起始时间的Datetime
console.log(convertToDatetime('3h 23m').toString()); 
// 基于当前时间的Datetime(当前时间加上3小时23分)
console.log(convertToDatetime('3h 23m', new Date()).toString());

如果需要更灵活的处理,比如支持更多时间单位或者严格格式校验,可以扩展正则表达式或者添加额外的判断逻辑。


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

火山引擎 最新活动