2009-04-23 14 views
7

有什麼現成的在JavaScript中(即不通過「插件」),可以讓我做這樣的事情setTimeout,但不是的東西應該有多少毫秒發生的話,我給它一個日期對象告訴它何時做某事?的setTimeout但是對於一個給定的時間

setToHappen(function() { 
    alert('Wake up!'); 
}, new Date("...")); 

是的,我知道我可以通過簡單地減去new Date()與我現有的約會對象(或者也許是周圍的其他方法)來獲取毫秒的量做到這一點,但我仍想知道。

回答

17

你不得不只要找到現在和你的約會對象之間的毫秒數。

function setToHappen(fn, d){ 
    var t = d.getTime() - (new Date()).getTime(); 
    return setTimeout(fn, t); 
} 
6

沒有,但你可以很容易地編寫自己的功能。只需以毫秒爲單位計算現在和給定時刻之間的差異,然後再以setTimeout來計算。

事情是這樣的:

setToHappen = function(fn, date){ 
    var now = new Date().getTime(); 
    var diff = date.getTime() - now; 
    return setTimeout(fn, diff); 
} 

編輯:1000去除多餘的乘法,感謝克里斯指出了這一點!

+0

這是不對的,已經的getTime返回毫秒。 – Chris 2015-12-11 11:11:55

+0

不客氣!感謝您的修復。 – Chris 2015-12-20 20:34:04

3

由於人們談論計算使用date對象超時間隔,但應當指出的是,在Firefox,最大值setTimeout()將針對間隔參數接受爲2147483647(2^31 - 1)作爲PRIntervalTime是一個有符號的32位整數。這出來不到25天。

相關問題