我写的脚本遇到一个小问题,它应该以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分钟,所以分钟在大多数情况下都是准确的。
答案 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"非常值得一读。