如何读取已设置的超时句柄还剩多少时间?

rsk*_*k82 4 javascript timeout

timeoutHandle = setTimeout(function() {
  //code
},1000);
Run Code Online (Sandbox Code Playgroud)

alert(timeoutHandle)返回一些奇怪的数字,例如 1 或 2,它应该是类似的900并且倒计时到0函数被调用的时间吗?所以我想我做错了。

Ry-*_*Ry- 5

您可以使用以毫秒为单位Date.getTime()获取Date对象的表示,因此(相当准确的)近似值是:

timeoutHandle = setTimeout(function() {
  // code
}, 1000);
timeoutStart = new Date().getTime();

...

var elapsedTime = new Date().getTime() - timeoutStart;
Run Code Online (Sandbox Code Playgroud)

setTimeout和的返回值setInterval只是一种“计时器 ID” - 您可以使用它来通过clearTimeout和停止计时器clearInterval,它不会动态更改。

编辑:正如@Rocket 指出的那样,是的,您可以使用Date.now()而不是new Date().getTime().

  • 在 IE9 之前,`Date.now()` 在 IE 中不可用。是的,IE很糟糕。 (4认同)
  • 您可以使用“Date.now()”而不是“new Date().getTime()”。 (2认同)