使用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
相关产品推荐
相关产品推荐

