sungwony

[javascript] 특정 시간에 함수 호출하기 본문

language/javascript

[javascript] 특정 시간에 함수 호출하기

일상이상삼상 2017. 3. 31. 10:42

프로젝트 중, 특정 시간에 서버와 통신에서 표출을 갱신해줘야 할 필요가 있었습니다.

특정 시간에 화면을 갱신해줘야 하는 경우에는 어떤 함수를 활용해야 할까요?

 

정확하게 시간을 인자로 받아 실행시켜주는 함수는 없습니다. 

하지만 활용할 수 있는 함수로 setTimeout() 이라는 함수가 있습니다.

 

setTimeout은 콜백함수와 시간값(밀리세컨)을 인자로 받아서 해당 시간만큼 뒤에 콜백함수를 호출해주는 함수입니다. 조금더 정확한 함수 사용법은 API를 참조하시면 될 것 같습니다. (https://developer.mozilla.org/ko/docs/Web/API/WindowTimers/setTimeout)

 

setTimeout(function(){alert("Hello");}, 5000);

 

첫번째 인자의 함수를 우리가 원하는 특정 시간에 호출 하기 위해서는 특정 시간과 현재 시간간의 차이를 밀리세컨으로 변환시켜 두번째 인자로 넘겨주어야 합니다. 이것 저것 설명하려니 글이 길어지네요.. 각설하고.. 하단의 함수를 참조하세요.

 

$(document).ready(function(){
   timerFunc(function(){alert("Hello")} ,20170331100000) //인자로 넘겨주는 dateTime은 'yyyyMMddhhmiss"의 기본형
});

function timerFunc(func, dateTime){
    var year = Number(dateTime.substring(0,4));
    var month = Number(dateTime.substring(4,6));
    var day = Number(dateTime.substring(6,8));
    var time = Number(dateTime.substring(8,10));
    var minute = Number(dateTime.substring(10,12));
    var second = Number(dateTime.substring(12,14));

    var oprDate = new Date(year, month-1, day, time, minute, second); //동작을 원하는 시간의 Date 객체를 생성합니다.
    var nowDate = new Date();

    var timer = oprDate.getTime() - nowDate.getTime(); //동작시간의 밀리세컨과 현재시간의 밀리세컨의 차이를 계산합니다.
    if(timer < 0){ //타이머가 0보다 작으면 함수를 종료합니다.
       return;
    }else{
       setTimeout(func, timer);
    }
}