如何让MomentJS将60分钟以mm:ss格式显示为60:00?
解决MomentJS格式化毫秒为XX:XX(总分钟数:秒数)的问题
你之前用moment(myVariable).format('mm:ss')的问题在于,这个方法是基于日期时间对象来格式化的,不是处理时长。比如3600000毫秒对应1小时,它会把分钟部分取成00,得到00:00,完全不符合显示总分钟数的需求。
而moment.duration(myVariable, 'seconds').asMinutes()的问题是,它返回的是总分钟数的数值(比如3600000毫秒转成秒是3600秒,asMinutes()返回60),但你需要的是60:00这种带冒号的格式化字符串,所以得手动处理格式化逻辑:
正确实现代码
// 封装成工具函数 function formatMsToMinSec(milliseconds) { // 用moment.duration处理时长 const duration = moment.duration(milliseconds); // 计算总分钟数:取整得到全部时长对应的分钟数 const totalMinutes = Math.floor(duration.asMinutes()); // 获取剩余秒数(范围0-59) const seconds = duration.seconds(); // 补零并拼接成XX:XX格式 return `${String(totalMinutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`; } // 测试用例 console.log(formatMsToMinSec(3600000)); // 输出 "60:00" console.log(formatMsToMinSec(61000)); // 输出 "01:01" console.log(formatMsToMinSec(3661000)); // 输出 "61:01"
逻辑说明
moment.duration(milliseconds):把毫秒转成Moment的时长对象,这个对象能帮你拆分出小时、分钟、秒等单位。duration.asMinutes():返回总时长的分钟数(浮点数),用Math.floor()取整得到总分钟数。duration.seconds():直接获取时长里的剩余秒数(范围0-59)。padStart(2, '0'):确保分钟和秒数都是两位数字,不足的话前面补0。
内容的提问来源于stack exchange,提问作者Optiq
相关产品推荐
相关产品推荐

