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

如何将分钟时长格式化为XX hours and YY minute(s)格式

如何将分钟时长格式化为XX hours and YY minute(s)格式

我来帮你搞定这个需求!不管是用原生JavaScript还是date-fns库,都能轻松实现分钟转成指定格式的时长显示,下面给你两种实用方案:

方案一:原生JavaScript实现

这种方案不需要依赖任何第三方库,直接通过简单的计算和字符串拼接就能完成,逻辑清晰易维护:

function formatMinutesToHours(totalMinutes) {
  // 计算小时数和剩余分钟数
  const hours = Math.floor(totalMinutes / 60);
  const minutes = totalMinutes % 60;
  
  // 处理单复数文本
  const hourLabel = hours === 1 ? 'hour' : 'hours';
  const minuteLabel = minutes === 1 ? 'minute' : 'minutes';
  
  // 根据不同情况拼接结果
  if (hours === 0) {
    return `${minutes} ${minuteLabel}`;
  }
  if (minutes === 0) {
    return `${hours} ${hourLabel}`;
  }
  return `${hours} ${hourLabel} and ${minutes} ${minuteLabel}`;
}

// 测试示例
console.log(formatMinutesToHours(1)); // 输出:"1 minute"
console.log(formatMinutesToHours(100)); // 输出:"1 hour and 40 minutes"
console.log(formatMinutesToHours(141)); // 输出:"2 hours and 21 minutes"
console.log(formatMinutesToHours(60)); // 输出:"1 hour"
console.log(formatMinutesToHours(0)); // 输出:"0 minutes"(可根据需求调整该场景的显示)

这个函数的逻辑很直观:先算出总时长对应的小时数和剩余分钟,然后根据数量判断单复数形式,最后分三种情况(只有分钟、只有小时、两者都有)拼接成符合要求的字符串。

方案二:使用date-fns库实现

如果你已经在项目中使用了date-fns,那用它的内置方法来处理会更简洁,还能避免自己写单复数逻辑:

// 先确保已安装并导入date-fns的相关方法
import { formatDuration, intervalToDuration } from 'date-fns';

function formatMinutesToHoursWithDateFns(totalMinutes) {
  // 将分钟转换为date-fns能识别的Duration对象
  const duration = intervalToDuration({
    start: 0,
    end: totalMinutes * 60 * 1000 // 转成毫秒值
  });
  
  // 格式化时长,配置显示规则
  return formatDuration(duration, {
    format: ['hours', 'minutes'], // 指定只显示小时和分钟
    delimiter: ' and ', // 设置小时和分钟之间的连接符
    // 自定义单复数显示(date-fns默认也能处理,这里明确指定更稳妥)
    locale: {
      formatDistance: (token, count) => {
        if (token === 'hour') return count === 1 ? 'hour' : 'hours';
        if (token === 'minute') return count === 1 ? 'minute' : 'minutes';
        return '';
      }
    }
  });
}

// 测试示例
console.log(formatMinutesToHoursWithDateFns(1)); // 输出:"1 minute"
console.log(formatMinutesToHoursWithDateFns(100)); // 输出:"1 hour and 40 minutes"
console.log(formatMinutesToHoursWithDateFns(141)); // 输出:"2 hours and 21 minutes"
console.log(formatMinutesToHoursWithDateFns(60)); // 输出:"1 hour"

这里用到了intervalToDuration把分钟转换成Duration对象,再用formatDuration按照我们需要的格式输出,配置项里可以灵活调整显示的时间单位、连接符和单复数规则,非常方便。

备注:内容来源于stack exchange,提问作者eXception

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 09:57:32