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

使用moment.js将时长格式化为mm:ss时的小时转分钟问题

解决moment.js将时长格式化为mm:ss(包含小时转分钟)的问题

你遇到的问题很典型——原来的代码之所以只输出06:40,是因为moment.utc(duration.asMilliseconds()).format('mm:ss')处理的是时间戳对应的UTC时间片段,而不是时长的累计分钟数。4000秒等于1小时6分40秒,这个方法里的mm只会提取UTC时间里的“分钟部分”(也就是6),而不会把1小时转换成60分钟加进去。

这里有两种简单的解决方法:

方法1:直接计算总分钟数和剩余秒数

这种方法最直观,直接从duration对象中提取需要的数值并计算:

const totalSeconds = 4000;
const duration = moment.duration(totalSeconds, 'seconds');

// 计算累计的总分钟数(包含小时转换的部分)
const totalMinutes = Math.floor(duration.asMinutes());
// 提取剩余的秒数(0-59)
const remainingSeconds = duration.seconds();

// 格式化补零,得到mm:ss格式
const formattedDuration = `${String(totalMinutes).padStart(2, '0')}:${String(remainingSeconds).padStart(2, '0')}`;
// 输出结果:66:40

方法2:拆分时长组件后累加计算

如果你更倾向于拆分duration的小时、分钟组件来计算,也可以这样写:

const totalSeconds = 4000;
const duration = moment.duration(totalSeconds, 'seconds');

const hours = duration.hours();
const minutes = duration.minutes();
const seconds = duration.seconds();

// 将小时转换为分钟后累加
const totalMinutes = hours * 60 + minutes;
const formattedDuration = `${String(totalMinutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
// 输出结果:66:40

核心思路就是:不要依赖UTC时间的格式化来提取分钟(它只会取当前小时内的分钟),而是直接获取时长的累计总分钟数,再搭配剩余秒数来生成目标格式。

内容的提问来源于stack exchange,提问作者Abhishek-Saini

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:57:41