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);
}
}