0

我试图timeNow在 javascript 中获取当前时间,并在 timeEnd脚本结束时获取脚本完成执行的时间,例如:

newDate = new Date();
timeNow = newDate.getTime();

for(i=0; i < 5; i ++){

    console.log("printing" + i);
}

timeEnd = timeNow - newDate.getTime();

console.log(timeEnd);

我想以秒或毫秒为单位获取执行此脚本所需的时间,但结果为 0。我不明白为什么,您能帮我吗?谢谢。

4

7 回答 7

5

对象一旦构建就不会一直滴答作响,Date它只代表一个瞬间。

您需要在脚本结束时重新评估时间,然后将该值与第一个值进行比较。

请注意,在现代 ES5 浏览器上,您可以使用“静态”Date.now()函数来获取当前时间。这比构建一个全新的Date对象更便宜。在较旧的浏览器上,您可以使用此 shim 模拟此功能:

Date.now = Date.now || function() {
    return +(new Date);
};

此时所需的代码变为:

var start = Date.now();

// do your stuff here
...

var end = Date.now();

var elapsed = end - start;

FWIW,在我笔记本电脑的 Chrome 控制台上运行时,您的简单循环报告 2ms。

于 2012-08-23T16:44:22.077 回答
2

发生这种情况是因为您只创建了一个Date对象。这些不会改变;你必须这样做:

timeEnd = timeNow - new Date().getTime();

new(注意和之间的空格Date

于 2012-08-23T16:45:23.543 回答
1
var t = new Date().getTime();
// code
console.log(new Date().getTime() - t);
于 2012-08-23T16:45:57.193 回答
0

因为我可以想象执行 5 次迭代需要不到一毫秒的时间。

于 2012-08-23T16:43:38.200 回答
0

您可以使用

开始时间 = 数字(新日期());

结束时间 = 数字(新日期());

于 2012-08-23T16:45:13.190 回答
0

我实际上认为它不会在不到一毫秒的时间内迭代。它认为问题在于,当您newDate.getTime()重复调用时,它每次都返回相同的值。对象一旦创建,就会在创建时设置。您需要创建一个新Date()对象来比较原始对象。

从我的 Firebug 控制台:

>>> d = new Date()
Date {Thu Aug 23 2012 10:45:52 GMT-0600 (Mountain Daylight Time)}
>>> d.getTime()
1345740352582
>>> d.getTime()
1345740352582
>>> d.getTime()
1345740352582
>>> d.getTime()
1345740352582

我可以向您保证,我没有d.getTime()在不到一毫秒的时间内手动拨打电话。

于 2012-08-23T16:45:43.430 回答
0

基本上,这样做

newDate = new Date();
timeNow = newDate.getTime();

for(i=0; i < 50; i++){
    console.log("printing" + i);
}

futureDate = new Date()
timeEnd =  futureDate.getTime();
timeLength = timeEnd - timeNow;


console.log(timeLength);
于 2012-08-23T16:56:15.053 回答