如何用JavaScript将秒数转换为hh:mm:ss格式?代码报错求助
解决JavaScript秒数转hh:mm:ss格式的TypeError问题
看起来你碰到的报错是因为你用的clearTime()、addSeconds(),还有带格式参数的toString('H:mm:ss')都不是原生JavaScript Date对象的自带方法——这些都是第三方日期处理库(比如Date.js、Moment.js这类)提供的API,如果没提前引入对应的库,浏览器自然会抛出TypeError啦。
给你两种靠谱的解决方案:
方案一:原生JavaScript实现(无需依赖外部库)
这是最稳妥的方式,不用额外引入任何库,直接自己计算时分秒并补零:
function secondsToHms(d) { // 处理负数情况(如果你的秒数可能为负的话) d = Math.abs(d); // 计算各时间单位 const hours = Math.floor(d / 3600); const minutes = Math.floor((d % 3600) / 60); const seconds = Math.floor(d % 60); // 补零确保每个部分都是两位数,比如5秒变成"05" const formattedHours = hours.toString().padStart(2, '0'); const formattedMinutes = minutes.toString().padStart(2, '0'); const formattedSeconds = seconds.toString().padStart(2, '0'); return `${formattedHours}:${formattedMinutes}:${formattedSeconds}`; }
测试示例:
- 输入
3661,返回01:01:01 - 输入
65,返回00:01:05 - 输入
5,返回00:00:05
方案二:使用第三方日期库(如果一定要用库的话)
如果你坚持想用类似你原来的写法,得先引入对应的库,比如用Moment.js的话,代码可以改成这样:
// 记得先在页面引入Moment.js function secondsToHms(d) { // 从一天的开始时间加上指定秒数,再格式化输出 return moment().startOf('day').add(d, 'seconds').format('HH:mm:ss'); }
不过要注意,现在Moment.js已经处于维护状态,推荐使用更现代的库比如Day.js,用法和Moment.js基本一致。
你的buildList函数里调用secondsToHms(item.time)的逻辑是没问题的,只要替换成上面正确的secondsToHms实现,就能正常渲染时间啦。
内容的提问来源于stack exchange,提问作者j.doe
相关产品推荐
相关产品推荐

