如何修改JS音频时长转换代码 实现输出00:00:00时分秒格式
解答
实现难度
极低,仅需删除1行代码即可实现需求,你现有逻辑已经完成了时、分、秒的数值计算,只是输出规则做了前导零位的截断。
问题根源
你写的toHHMMSS格式化函数里,下面这行过滤逻辑会自动移除数组开头值为"00"的项:
.filter((v,i) => v !== "00" || i > 0)
当音频总时长不足1小时,计算得到的小时数为"00"时,这行代码会直接把小时位从输出结果里删掉,最终就只返回分:秒的短格式。
修改方法
直接删掉上面那行filter调用即可。你之前的map逻辑已经给时、分、秒三个数值都做了不足两位补前导零的处理,保留三个数组项直接用冒号拼接,就能得到固定长度的时:分:秒格式。
修改后的完整代码:
var audio_url_raw = document.querySelector('.acf-fields.-top div#url.acf-field.acf-field-text.acf-field-60db6e20efbb0 div.acf-input div.acf-input-wrap input'); var au = document.createElement('audio'); au.src = audio_url_raw.value; au.addEventListener('loadedmetadata', function(){ var toHHMMSS = (secs) => { var sec_num = parseInt(secs, 10) var hours = Math.floor(sec_num / 3600) var minutes = Math.floor(sec_num / 60) % 60 var seconds = sec_num % 60 return [hours,minutes,seconds] .map(v => v < 10 ? "0" + v : v) .join(":") } var duration = au.duration; $(".acf-fields.-top div#duration.acf-field.acf-field-text.acf-field-60db6e92efbb2 div.acf-input div.acf-input-wrap input").val(toHHMMSS(duration)); },false);
输出示例
- 时长42秒:输出
00:00:42 - 时长5分17秒:输出
00:05:17 - 时长2小时12分3秒:输出
02:12:03
内容的提问来源于stack exchange,提问作者Gregory Schultz
相关产品推荐
相关产品推荐

