JS H:m:s:ms格式秒表问题:分钟到60未重置持续递增求修复
问题解决:秒表分钟数不重置的修复
你的问题确实出在m变量的计算逻辑上,当前代码里var m = parseInt(n / 60)得到的是累计总秒数,而非当前分钟数,所以会持续递增不会重置。
修正思路
首先明确你的计数逻辑:定时器以1000/60(约16.67ms)为间隔执行,n每加1代表1/60秒。因此:
- 总秒数 =
n / 60 - 当前分钟数 = 总秒数 ÷ 60 后对60取余(这样超过60分钟的部分会被归到小时,分钟数保持0-59)
- 当前秒数 = 总秒数对60取余
- 小时数 = 总秒数 ÷ 3600(3600秒=1小时)
修正后的代码
n = 3600; td = setInterval(function () { n++; // 计算总秒数 const totalSeconds = n / 60; // 小时数:总秒数 ÷ 3600 let hours = Math.floor(totalSeconds / 3600); // 分钟数:(总秒数 ÷ 60) 对60取余,确保0-59 var m = Math.floor(totalSeconds / 60) % 60; // 秒数:总秒数对60取余,确保0-59 var s = Math.floor(totalSeconds % 60); // 1/60秒单位:n对60取余,0-59 var M = n % 60; $("#display0").html(toDub(hours) + ":" + toDub(m) + ":" + toDub(s) + ":" + toDub(M)) }, 1000 / 60);
关键说明
- 用
Math.floor替代parseInt更适合处理整数取整逻辑,避免隐式转换问题 - 对分钟数计算添加
% 60,确保数值超过60时自动重置为0,同时把超出的部分累计到小时数中
内容的提问来源于stack exchange,提问作者Roby Firnando Yusuf
相关产品推荐
相关产品推荐

