Programming/Web

[Javascript] Date 객체 UTC/Locale

혤혤혤 2016. 10. 20. 15:38

UTC(Coordinated Universal Time): 세계 협정시

GMT(Greenwich Mean Time): 그리니치 평균시 

UTC, GMT는 교환되어 사용될 수 있으나 GMT가 과학적으로 정확하지 않다고 정의됨.

UTC, GMT는 영국 그리니치 천문대를 지나는 본초자오선(경도 0°)을 기준 시간으로 함. 


UTC 형식 : 1981-02-22T09:00Z (UTC 시간대일 경우 Z가 붙는다)

1981-02-22T09:00:00+09:00 (UTC 시간대가 아닐 경우 ±hh:mm±hhmm±hh을 붙인다)


JavaScript에서Date 생성시 반환값 (기본 GMT형식 / UTC로 변환/ Locale 적용 formmat)


console.log('TimeZone:'new Date().getTimezoneOffset())

->TimeZone Offset: -540 (한국 시간에서 9시간을 빼면 UTC Time)


var date = new Date();

console.log(date); 

-> Thu Oct 20 2016 15:06:08 GMT+0900 (KST)

console.log(date.toISOString()); 

-> 2016-10-20T06:15:26.812Z

console.log(date.toLocaleString());

-> 2016. 10. 20. 오후 3:15:26


var d = new Date('2016-10-22T15:00:00.000Z');

console.log(d);

->Sun Oct 23 2016 00:00:00 GMT+0900 (KST)

console.log(d.toISOString());

->2016-10-22T15:00:00.000Z

console.log(d.toLocaleString());

->2016. 10. 23. 오전 12:00:00


var d2 = new Date('2016-10-22T15:00:00+09:00');

console.log(d2);

->Sat Oct 22 2016 15:00:00 GMT+0900 (KST)

console.log(d2.toISOString());

->2016-10-22T06:00:00.000Z

console.log(d2.toLocaleString());

->2016. 10. 22. 오후 3:00:00


var d3 = new Date('2016-10-22T15:00:00');

console.log(d3);

->Sun Oct 23 2016 00:00:00 GMT+0900 (KST)

console.log(d3.toISOString());

->2016-10-22T15:00:00.000Z

console.log(d3.toLocaleString());

->2016. 10. 23. 오전 12:00:00;


var d4 = new Date('2016-10-22 15:00:00');

console.log(d4);

->Sat Oct 22 2016 15:00:00 GMT+0900 (KST)

console.log(d4.toISOString());

->2016-10-22T06:00:00.000Z

console.log(d4.toLocaleString());

->2016. 10. 22. 오후 3:00:00


결론. Javascritp에서 Date 객체를 인자를 주지 않고 생성할 경우 

new Date() = 컴퓨터에서 사용하는 Time Zone으로 인식, 현지시간을 반환 


시간 문자열 인자를 넘겨줄 경우

1) UTC 포멧의 UTC 시간 => UTC Time Zone으로 인식

2) UTC 포멧의 다른 Time Zone 시간 => 입력된 Time Zone으로 인식

3) UTC 포멧의  Time Zone표시가 없는 시간 => UTC Time Zone으로  인식

4) UTC 포멧이 아닌 시간 문자열 => 컴퓨터에서 사용하는 Time Zone으로 인식

=> 1,2,3,4번 에서 인식된 Time Zone으로 현지시간을 계산하여 반환