2015년 9월 2일 수요일

자바스크립트에서 서버시간 구하기 [Date(),XMLHttpRequest]

자바스크립트에서 시간(날짜)을 끌어오는 개체는 Date() 입니다.


Date 개체는 아래의 특성을 가지고 있습니다.

dateObj = new Date()
dateObj = new Date(dateVal)
dateObj = new Date(year, month, date[, hours[, minutes[, seconds[,ms]]]])
 
매개 변수
dateObj : 필수 요소. Date 개체가 할당되는 변수 이름입니다.
dateVal : 필수 요소. 숫자값 dateVal이 UTC(Universal Coordinated Time)로 지정된 날짜와 1970년 1월 1일 자정 사이의 시간을 밀리초로 나타냅니다. 문자열인 경우 dateVal이 날짜 및 시간 문자열(JavaScript)의 규칙에 따라 구문 분석됩니다. dateVal 인수는 ActiveX 개체에서 반환된 VT_DATE 값일 수도 있습니다.
year : 필수 요소. 예를 들어 76이 아니라 1976처럼 전체 연도로 나타냅니다.
month : 필수 요소. 월은 0부터 11까지의 정수(1월부터 12월)로 나타냅니다.
date : 필수 요소. 날짜는 1부터 31까지의 정수로 나타냅니다.
hours : 선택 사항입니다. minutes를 사용하면 반드시 사용해야 합니다. 시간은 0부터 23까지(자정부터 오후 11시)의 정수로 나타냅니다.
minutes : 선택 사항입니다. seconds를 사용하면 반드시 사용해야 합니다. 분은 0부터 59까지의 정수로 나타냅니다.
seconds : 선택 사항입니다. milliseconds를 사용하면 반드시 사용해야 합니다. 초는 0부터 59까지의 정수로 나타냅니다.
ms : 선택 사항입니다. 밀리초는 0부터 999까지의 정수로 나타냅니다.
 
설명
Date 개체에는 밀리초 단위까지 특정 인스턴스를 시간으로 나타내는 숫자가 포함되어 있습니다. 인수 값이 정해진 인수 값의 범위보다 크거나 음수이면 저장된 다른 값은 그에 따라 자동적으로 수정됩니다. 예를 들어 150초로 지정하면 JavaScript에서 2분 30초로 다시 정의합니다.
숫자가 NaN이면 개체가 시간의 특정 인스턴트를 나타내지 않습니다. Date 개체에 매개 변수를 전달하지 않으면 현재 시간(UTC)으로 초기화됩니다. 개체에 값을 지정해야 사용할 수 있습니다.
Date 개체에서 나타낼 수 있는 날짜 범위는 1970년 1월 1일 전후로 약 285,616년입니다.

그런데 Date 개체만 사용시 참조하는 시간대는 현재 보고있는 컴퓨터의 시간을 참조합니다.

이는 자바스크립트가 서버 사이드 언어가 아닌 클라이언트 사이드 언어이기때문에 클라이언트에서 로드되어야만 실행되는 특성 때문입니다.

따라서 이 시간은 상대적으로 틀릴 가망성이 높습니다.

그래서 상대적으로 자주 타임서버와 시간을 맞추고 끄지 않는 서버의 시간을 참조하면 모든 사람들에게 같은 결과물을 뿌려주고 틀릴 가망성도 낮아지게 됩니다.

자바스크립트는 앞에서도 언급 했듯이 클라이언트 사이드 언어이기 때문에 자바스크립트 자체로만으로는 서버 시간을 표시 할 수가 없습니다.

따라서 서버의 시간을 가져올 중간 매개체가 필요합니다.

여기서는 XMLHttpRequest 개체를 이용하는데요.

XMLHttpRequest 개체는 클라이언트와 서버 중간에서 요청과 결과를 전달하는 역할을 합니다.

아패는 XMLHttpRequest 에서 시간만 빼내는 함수입니다.

//서버시간 불러오기
 
var xmlHttp;
function srvTime(){
if (window.XMLHttpRequest) {//분기하지 않으면 IE에서만 작동된다.
xmlHttp = new XMLHttpRequest(); // IE 7.0 이상, 크롬, 파이어폭스 등
xmlHttp.open('HEAD',window.location.href.toString(),false);
xmlHttp.setRequestHeader("Content-Type", "text/html");
xmlHttp.send('');
return xmlHttp.getResponseHeader("Date");
}else if (window.ActiveXObject) {
xmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
xmlHttp.open('HEAD',window.location.href.toString(),false);
xmlHttp.setRequestHeader("Content-Type", "text/html");
xmlHttp.send('');
return xmlHttp.getResponseHeader("Date");
}
}
var st = srvTime();
var today = new Date(st);
 
//서버시간 불러오기 끝

today만 출력하면 서버의 시간이 표시됩니다.

XMLHttpRequest 개체가 웹 표준은 아닙니다.

하지만 현존하는 거의 모든 웹브라우저에서 지원하기 때문에 위의 방법으로 서버의 시간을 뽑아오는 방법이 현재로서는 가장 쉬운 방법입니다.

댓글 1개:

  1. 이거때문에 정말 고민하다가 이거보구 완전해결했네여 정말 고마워요 프로그래머는 아니고 빌더 홈피 만들다가 d day 창 만들려고 하다가 내 컴퓨터의 시간이 잘못되어 있는 덕분에 이걸 찾게 되었네여 진정 감사^^

    답글삭제