서버시간 가져와서 d-day 카운트
본문
서버시간 가져와서 D-day 카운트 되는거 구현해야 하는데요~
밑의 소스로 해서 구현이 되었는데,
다른 서버에 올리니까 카운트가 버벅거린다고 해야하나?
1초단위로 줄어들지 않고 느리거나 멈춰있거나 그런데..
서버시간을 가져오는 부분에서 문제가 있는 것 같은데(그냥 new Date()로 하면 잘됨..)
왜일까요ㅠㅠ
$(function(){
//D-DAY
$('.time_count').each(function(){
var $this = $(this);
var dataTime = $this.data('time');
var dday = new Date(dataTime).getTime(); //디데이
//서버시간 가져오기
var xmlHttpRequest;
if(window.XMLHttpRequest){// code for Firefox, Mozilla, IE7, etc.
xmlHttpRequest = new XMLHttpRequest();
}else if(window.ActiveXObject){// code for IE5, IE6
xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
}else{
return;
}
setInterval(function(){
//서버시간 가져오기
xmlHttpRequest.open('HEAD', window.location.href.toString(), false);
xmlHttpRequest.setRequestHeader("ContentType", "text/html");
xmlHttpRequest.send('');
var serverDate = xmlHttpRequest.getResponseHeader("Date");
var now = new Date(serverDate); //현재 날짜 가져오기()
var distance = dday - now;
var d = Math.floor(distance / (1000 * 60 * 60 * 24));
var h = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
var m = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60));
var s = Math.floor((distance % (1000 * 60)) / 1000);
$this.addClass('def');
if (d < 1 && h < 1) { //1시간 남았을 경우
$this.addClass('red');
}
if(h < 10){ h = '0'+h; }
if(m < 10){ m = '0'+m; }
if(s < 10){ s = '0'+s; }
if(d <= 0){ //DAY가 0일 경우
$this.html('<strong>' + h + ':' + m + ':' + s + '</strong>');
} else {
$this.html('<b>' + d + '</b><small>DAY</small><strong>' + h + ':' + m + ':' + s + '</strong>');
}
if (now > dday){ //디데이가 지난 경우
$this.closest('a').addClass('list_closed'); //썸네일에 마감표시
$this.addClass('black');
$this.html('<strong>00:00:00</strong>');
}
}, 1000);
});
});
답변 3
페이지가 열릴 때, 서버 시각 한 번만 가져오고
나머지는 브라우저에서
자바스크립트로 초 단위로 표시해 주면 됩니다.
해결했습니다..
window.location.href.toString()
여기서 url을 못가져와서 생긴 문제인 듯 하네요..
정확한 원인은 모르겠지만 ㅠㅠ
https가 아니라 그런 것 같기도 하고
암튼 저거 대신 해당 사이트의 url을 수기로 넣어줬더니 잘 되어요
해당 사이트의 url을 수기로 넣어줬더니 잘 되어요<--- 제가 보기엔 잘되니 그만인 것이 아닙니다
1초마다 서버에서 시각을 가져 온다는 건데 뭐하러 저런 행동을??
많은 접속자가 저러고 있다고 생각하면 서버로서는 끔직한 일이 되겠는걸요?
로컬 컴퓨터가 아무리 엉터리 시계를 가지고 있다고 해도 30초 또는 1분도 아니고 1초마다는 아닙니다
서버 시각은 얼마나 정확하게 가는지 얼마나 정확한 시각이 필요한지 모르겠지만
아무리 서버와 시각 동기화가 필요하다고 해도 1초마다 서버 시각을 가져올 것은 아닙니다
저렇게 1초마다 실행을 하게 되면 시간이 지날수록 로컬 컴은 버벅이게 되어있습니다
답변을 작성하시기 전에 로그인 해주세요.