使用moment.js将不足1分钟时长强制格式化为hh:mm:ss格式的问题咨询
解决方案
你遇到的两个问题都可以通过配置moment-duration-format插件的格式化参数结合输入预处理解决,无需手动拼接字符串:
1. 异常输出修复(负时长/小于1秒输出毫秒)
首先对输入的时长值做非负钳位,避免负时长传入导致异常;同时在格式化参数中指定最小单位为秒,阻止插件输出毫秒级文本:
// 对输入值做非负处理,小于0的时长统一按0计算 let tkd = moment.duration(Math.max(0, trackLength)); let prg = moment.duration(Math.max(0, trackProgress));
2. 不足1分钟补前导零
调用format方法时添加配置项,指定仅裁剪小时位的前导零,分钟位强制保留:
const formatConfig = { trim: 'left', // 仅裁剪左侧的前导零 stopTrim: 'm', // 裁剪到分钟单位就停止,不会裁剪分钟位的前导零 smallestUnit: 'seconds' // 最小展示单位为秒,小于1秒统一显示00 } let fin = prg.format("hh:mm:ss", formatConfig) + ' / ' + tkd.format("hh:mm:ss", formatConfig);
效果验证
- 进度32秒、总时长5分55秒:输出
00:32 / 05:55 - 进度2分40秒、总时长5分55秒:输出
02:40 / 05:55 - 进度1小时2分3秒、总时长1小时30分:输出
01:02:03 / 01:30:00 - 负时长输入:统一按0处理,输出
00:00无异常毫秒文本
内容的提问来源于stack exchange,提问作者Fabzz
相关产品推荐
相关产品推荐

