Javascript JS脚本持续时间

Javascript JS脚本持续时间,javascript,time,duration,Javascript,Time,Duration,我编写的脚本有一个小问题,它应该以hh:mm:ss格式返回脚本的持续时间(执行时间) 以下是脚本: var start = new Date(); { CODE GOES IN HERE } var end = new Date(); var miliseconds = end - start; function runTime(ms) { var seconds = 0; var minutes = 0; var hours = 0; if (ms > 1000) { se

我编写的脚本有一个小问题,它应该以hh:mm:ss格式返回脚本的持续时间(执行时间)

以下是脚本:

var start = new Date();
{ 

CODE GOES IN HERE

}
var end = new Date();
var miliseconds = end - start;
function runTime(ms) {
var seconds = 0;
var minutes = 0;
var hours = 0;
if (ms > 1000) {
    seconds = (ms / 1000).toFixed(0);
    if (seconds > 60) {
        seconds -= 60;
        minutes = (seconds / 60).toFixed(0);
        if (minutes > 60) {
            minutes -= 60;
            hours = (minutes / 60).toFixed(0)
        }
    }
}
if (seconds.toString().length == 1) {
    var seconds = '0' + seconds;
}   
if (minutes.toString().length == 1) {
    var minutes = '0' + minutes;
}
if (hours.toString().length == 1) {
    var hours = '0' + hours;
}   
return("Job Done in: " + hours + ":" + minutes + ":" + seconds + "(" + miliseconds + "ms)");
 }
iimDisplay(runTime(miliseconds));
以下是一些示例输出:

Job Done in: 03:166:13548(13608024ms)
Job Done in: 00:51:3032(3091973ms)
Job Done in: 00:02:3706(3766265ms)
Job Done in: 00:50:2994(3053675ms)
Job Done in: 00:52:30(3152527ms)

正如您所看到的,有时它看起来不太正确,通常脚本会持续40-60分钟,因此大部分时间分钟都是准确的。

我认为您的问题在于:

if (seconds > 60) {
    seconds -= 60;
    minutes = (seconds / 60).toFixed(0);
    if (minutes > 60) {
        minutes -= 60;
        hours = (minutes / 60).toFixed(0)
    }
}
当秒数大于60时,只需取60。例如,如果秒数是189,那么得到的是129,而不是你想要的9。您必须计算分钟数,然后执行以下操作:

seconds = seconds - (minutes * 60);
你也必须在几分钟内做到这一点,但要花上几个小时

如果
秒数
远大于60,该怎么办?只减去一次是不够的。你想要的是

      seconds %= 60;
分钟也一样


顺便说一句,与其使用
.toFixed(0)
,不如使用
Math.floor()

以下公式让你的生活更轻松:

hours = (ms / (1000*60*60));
ms = ms % (1000*60*60)
minutes = ms / (1000*60)
ms = ms % (1000*60)
seconds = ms / (1000)

虽然其他海报指出了@traxs原始代码中明显的数学缺陷,但我想知道是否值得指出Javascript中的Timer函数(我看到的是setTimeout和setInterval)会产生意想不到的结果

此代码的三个示例运行: (在OSX 10.8.5上的safari 6.1.1中):

(OSX 10.7.5上的Firefox 27.01):

您可以阅读有关Javascript中计时器的更多信息:
或者特雷弗·伯纳姆的优秀作品值得一读

时间在JS中并不容易考虑:我正在用mozzila插件使用它…哦,sry,忽略不在那里的“/60”部分,只是我想要的东西tried@Trax你可能会考虑,否则答案不会被忽略。
hours = (ms / (1000*60*60));
ms = ms % (1000*60*60)
minutes = ms / (1000*60)
ms = ms % (1000*60)
seconds = ms / (1000)
var fireCount = 0;
var start = new Date;
var timer = setInterval(function() {
  if (new Date - start > 1000) { 
    clearInterval(timer); console.log(fireCount); return;
  }
  fireCount++;
}, 0);
  228
  227
  220
  250
  250
  249