1. 原文鏈接:js定時器每天固定時間執行任務
首先,定義一個方法,在方法內接收四個參數,一個參數是接收間隔的天數,第二個參數是接收具體某個時間點,第三個參數是決定是否在啟動服務時立即執行一次,第四個參數是一個執行的方法,即要定時執行的邏輯。當然,這前三個參數將定義在一個對象中,實際傳入一個對象和一個函數作為參數就可以,這樣整個對象可以作為配置參數。
func參數是要執行的方法。
如果需要多個時間點可以調用多次。
timeoutFunc (config, func) { config.runNow && func() const nowTime = new Date().getTime() const timePoints = config.time.split(':').map(i => parseInt(i)) let recent = new Date().setHours(...timePoints) recent >= nowTime || (recent += 24 * 3600000) setTimeout(() => { func() setInterval(func, config.interval * 3600000) }, recent - nowTime) }
config = {//參數的說明 interval: 1, //間隔天數,間隔為整數 runNow: false, //是否立即運行 time: "14:00:00" //執行的時間點 時在0~23之間 }
2. 原文鏈接:JS 指定每天固定時間執行
window.setInterval(function(){ var refreshHours = new Date().getHours(); var refreshMin = new Date().getMinutes(); var refreshSec = new Date().getSeconds(); if(refreshHours=='0' && refreshMin=='0' && refreshSec=='0'){ // 指定每天凌晨做的事情 } }, 1000);
3. 原文鏈接:JS定時器使用,定時定點,固定時刻,循環執行詳解
var date = new Date();//現在時刻 var dateIntegralPoint = new Date();//用戶登錄時刻的下一個整點,也可以設置成某一個固定時刻 dateIntegralPoint.setHours(date.getHours()+1);//小時數增加1 dateIntegralPoint.setMinutes(0); dateIntegralPoint.setSeconds(0); setTimeout("nextIntegralPointAfterLogin();",dateIntegralPoint-date);//用戶登錄后的下一個整點執行。 function nextIntegralPointAfterLogin(){ IntegralPointExecute();//在整點執行的函數,在每個整點都調用該函數 setInterval("IntegralPointExecute();",60*60*1000);//一個小時執行一次,那么下一個整點,下下一個整點都會執行 }
【推薦】:js技巧