使用moment.js将分钟数转换为x小时y分钟格式的人类可读时长
解决方案
方案1:纯原生Moment实现(无额外依赖)
直接调用Moment自带的humanize方法拼接,自动继承全局本地化配置:
function formatDuration(minutes) { const dur = moment.duration(minutes, 'minutes') const hours = Math.floor(dur.asHours()) const mins = dur.minutes() const res = [] if (hours > 0) { res.push(moment.duration(hours, 'hours').humanize()) } if (mins > 0) { res.push(moment.duration(mins, 'minutes').humanize()) } return res.join(', ') }
测试效果完全匹配需求:
formatDuration(124)→2 hours, 4 minutesformatDuration(34)→34 minutesformatDuration(725)→12 hours, 5 minutes
如果你的Moment全局设置为其他语言(比如中文),输出会自动适配为对应语言的表述,无需额外修改代码。
方案2:使用官方配套插件实现更简洁的格式化
如果可以引入Moment官方维护的moment-duration-format插件,可以直接调用内置的format方法,代码更精简:
// 引入插件后直接调用,自动适配当前Moment的locale配置 const formatted = moment.duration(totalMinutes, 'minutes').format('h [hours], m [minutes]', { trim: 'all', // 自动删除值为0的单位部分 pluralize: true, // 自动处理单复数 largest: 2 // 最多展示两个单位,不会出现天、秒 })
效果和方案1完全一致,也支持全量本地化能力。
内容的提问来源于stack exchange,提问作者Nour
相关产品推荐
相关产品推荐

