2014-03-01 33 views
1

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

下面是脚本:

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分钟,所以分钟在大部分时间都是准确的。

+0

时间不容易在JS考虑:http://momentjs.com/ –

+0

我用它与mozzila插件... – Trax

回答

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

你必须做同样的时间,但花费数小时。

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

如果seconds比60大得多?仅减去一次将是不够的。你想要的是

 seconds %= 60; 

而且同样的事情分钟。

顺便说一句,而不是.toFixed(0)你应该只使用Math.floor()

+0

哦,谢谢,忽略不在那里的“/ 60”部分,只是我试过 – Trax

+0

@Trax:你可能会考虑[从问题中删除它](http://stackoverflow.com/posts/22114163/edit)然后,否则答案中不会被忽略 - 嗯,你刚刚做到了。 – Bergi

0

这里有一个公式,将让你的生活更轻松:

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

虽然其他海报指出了@traxs原代码明显mathamathical的缺陷,我不知道是不是值得指出的定时器功能在Javascript中(我正在看你setTimeoutsetInterval)可以给意想不到的结果。此代码的

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

三个样品运行: (在Safari 6.1.1在OSX 10.8.5):

228 
    227 
    220 

(在OSX 10.7.5火狐27.01):

250 
    250 
    249 

您可以阅读更多关于Javascript的定时器:at this John Resig Blogpost 或者Trevor Burnham的出色"Async JavaScript"非常值得一读。