2017-04-18 70 views
0

我使用setInterval(5*60*1000)每5分鐘撥打我的電話號碼,但問題是如果我在00.03AM打開我的網頁,功能將被調用的時間是00.08AM。如何使用localtime和setInterval()?

所以,我想我的功能被稱爲跟隨當地時間,我的意思是在現實生活中的時間。例如,如果我在00.03AM打開我的網頁,則會每5分鐘調用一次該功能,例如00.05AM, 00.010AM, 00.015AM, ...

或換句話說,如何讓我的功能在小時內的下一個5分鐘點運行然後每5分鐘運行一次。 請建議我如何做到這一點。謝謝。

+0

取決於你想要如何精確的是,考慮在一分鐘的間隔運行的功能,並且使其檢查,看看是否當前時間是五個 – Hamms

回答

3

我要做的是每分鐘檢查一次,但只有在時間爲5分鐘的倍數時才執行。類似這樣的:

setInterval(function() { 
    if(new Date().getMinutes() % 5 == 0){ 
    // Do something 
    } 
}, 60*1000) 
+0

的倍數非常感謝你。有用 !!!。但是有一些延遲2到3秒之前(有時會)再次調用函數。因此,我添加了更多功能:'if(new Date()。getSeconds()== 0)'正好5分鐘調用該函數。 – Nothingnez

+0

如果你這樣做了,不要忘記你需要'setInterval'來運行每一秒! –

+0

是的,我做到了。再次感謝你 :) – Nothingnez

0

確定距離下一個五個距離多遠,然後從該點開始觸發事件。

var dateNow = new Date(Date.now()); 
 
var currentMinute = parseInt(dateNow.getMinutes().toString()[1]); 
 
var currentSecond = dateNow.getSeconds(); 
 

 
var timer1; 
 
var secsUntilNextFive = 5; 
 

 
console.log("Minutes is: " + currentMinute); 
 
console.log("Seconds is: " + currentSecond); 
 

 
if (currentMinute===5 || currentMinute===0) 
 
{ 
 
    secsUntilNextFive = 1; 
 
} 
 
else if (currentMinute<5) 
 
{ 
 
    secsUntilNextFive = (5-currentMinute) * 60; 
 
} 
 
else if (currentMinute>5) 
 
{ 
 
    secsUntilNextFive = (10-currentMinute) * 60; 
 
} 
 
// Now subtract the mins already elapsed towards next goal 
 
secsUntilNextFive -= currentSecond; 
 

 
console.log("Timer will kickoff in: " + secsUntilNextFive + "seconds"); 
 

 
DoAction(); // Do the first time or you can wait until the timer goes off 
 

 
setTimeout(function(){ 
 

 
    console.log("Starting timer now..."); 
 
//Start the interval to now start every 5 
 
    timer1 = setInterval(DoAction, 60*1000*5); 
 
    
 
}, secsUntilNextFive*1000); 
 

 
function DoAction() { 
 
    console.log("Doing a task..."); 
 
}