서버시간 가져와서 d-day 카운트

서버시간 가져와서 d-day 카운트

QA

서버시간 가져와서 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초마다 실행을 하게 되면 시간이 지날수록 로컬 컴은 버벅이게 되어있습니다

 

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,524 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT