JS脚本持续时间

时间:2014-03-01 12:10:24

标签: 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) {
    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分钟,所以分钟在大多数情况下都是准确的。

4 个答案:

答案 0 :(得分:1)

我认为你的问题在这里:

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);

你需要做几分钟,但需要几个小时。

答案 1 :(得分:0)

if (seconds > 60) {
    seconds -= 60;

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

      seconds %= 60;

分钟同样如此。

顺便说一下,您应该使用.toFixed(0)而不是Math.floor()

答案 2 :(得分:0)

这是一个让您的生活更轻松的公式:

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

答案 3 :(得分:0)

虽然其他海报在@traxs原始代码中指出了明显的mathamathical缺陷,但我想知道是否值得指出Javascript中的 Timer 函数(我正在看着你 setTimeout setInterval )可以提供意外的结果。

var fireCount = 0;
var start = new Date;
var timer = setInterval(function() {
  if (new Date - start > 1000) { 
    clearInterval(timer); console.log(fireCount); return;
  }
  fireCount++;
}, 0);

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

  228
  227
  220

(OSX 10.7.5上的Firefox 27.01):

  250
  250
  249

您可以在Javascript中详细了解计时器:at this John Resig Blogpost 或者Trevor Burnham的优秀"Async JavaScript"非常值得一读。