2017-01-25 41 views
0

我正在使用Date()對象來製作鬧鐘。我試圖製作鬧鐘。當日期對象的時間到達用戶設置的時間時,我想要執行一個函數。JavaScript中的基於時間輪詢

用戶通過選擇特定時間來設置鬧鐘。我卡住的地方是我想要輪詢直到用戶選擇的時間等於系統時間。我試着用setTimeout()但得到RangeError: Maximum call stack size exceeded

function showTime(){ 
      var e = document.getElementById("hourSelect"); 
      var hour = e.options[e.selectedIndex].value; 
      var e1 = document.getElementById("autoDropDown"); 
      var minuteSelected = e1.options[e1.selectedIndex].value; 
      var e2 = document.getElementById("amPmSelect"); 
      var AMPM = e2.options[e2.selectedIndex].value; 
      } 

因此,這就是我得到我的鬧鐘時間。所以,我應該使用什麼來檢查,如果這個時間等於系統時間(這是我獲得的使用Date()對象

var today = new Date(); 
     var hours = today.getHours(); 
     var m = today.getMinutes(); 
     var s = today.getSeconds(); 
     var suffix = (hours >= 12)? 'pm' : 'am'; //converting military time to non-military time. 
     hours = (hours > 12)? hours -12 : hours; 
     hours = (hours == '00')? 12 : hours; 
     m = checkTime(m); 
     s = checkTime(s); 

PS:我照顧了數據不匹配的,轉換的時間爲一個號碼,也轉換一切。正常的時間,而不是軍事的時間。

+0

你能告訴我們嗎你在哪裏執行'setTimeout'函數? – Trucy

+0

' \t \t \t' – CoderSenju

回答

0
var alarm = new Date(2017,00,25,14,9,01); 

var checktime = function(){ 
var date = new Date(); 
if(alarm.getHours() === date.getHours()){ 
    if(alarm.getMinutes() === date.getMinutes()){ 
      if(alarm.getMinutes() === date.getMinutes()){ 
       console.log('trigger'); 
       return true; 
      } 
    } 
    return false; 
}; 
}; 

var interval = setInterval(function(){ 
    if(checktime()){ 
     clearInterval(interval); 
     console.log('cleared'); 
    }; 
},100); 

可以使用的setInterval並保持檢查,看看時間匹配您選擇報警時間後,經過時代matche,你可以觸發你的函數。也有它clearInterval後觸發器