현인

[Javascript] Date.getHours 시간 안 맞는 문제 본문

개발 일기

[Javascript] Date.getHours 시간 안 맞는 문제

현인(Hyeon In) 2023. 8. 23. 11:01

date 시간 값을 가져오는 과정에서 시간이 안 맞는 문제가 있어서 알아보게 되었다.

문제 파악

const date = new Date("2023-08-22T08:32:03.986Z")

const hour = date.getHours(date);

console.log(date): // Tue Aug 22 2023 17:32:03 GMT+0900 (한국 표준시)
console.log(hour); // 17

Date.getHours() 메서드는 인자로 넘겨준 날짜의 시간 값을 24시간 형식(0~23)으로 반환해준다.

하지만 위 코드에서 보이는 것처럼 hour을 콘솔에 출력해보면, '17'이라는 값이 나온다. 

이렇게 되는 이유는 Date 생성자 함수를 사용해서 가져온 현재 날짜와 시간은 기본적으로 사용자의 PC에 설정 된 표준 시간대를 기준으로 표시되기 때문이다. (대한민국의 경우 UTC + 9시간)

따라서 콘솔에 출력된 시간이 8시가 아닌 17시가 출력된 것이다.

만약, newDate 생성자 함수로 받은 날짜의 시간 값을 그대로 사용하고 싶다면 아래와 같이 해결할 수 있다.

해결 방법

const date = new Date("2023-08-22T08:32:03.986Z")

// 1. 시간대 차이값을 가져와서 더해주는 방법
console.log(date.getTimezoneOffset()) // -540
const hour1 = date.getHours() + (date.getTimezoneOffset() / 60);

// 2. 9시간을 빼는 방법
const hour2 = date.getHours() - 9;

console.log(hour1); // 8
console.log(hour2); // 8

참고 자료

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Date

 

Date - JavaScript | MDN

JavaScript Date 객체는 시간의 한 점을 플랫폼에 종속되지 않는 형태로 나타냅니다. Date 객체는 1970년 1월 1일 UTC(협정 세계시) 자정과의 시간 차이를 밀리초로 나타내는 정수 값을 담습니다.

developer.mozilla.org

 

반응형