자바스크립트의 시간을 구하는 함수 new Date()를 하게되면
아래와 같은 값이 나온다.
//2023-01-10일 오전 02:44분 기준
const now = new Date();
console.log(now); //2023-01-09-T17:44:32.756T
시간이 위 주석과 같이 나오는 이유는 컴퓨터 언어에서는 GMT(Greenwich Mean Time) 기준으로 시간을 알려주는데, 한국 시간은 GMT 기준 9시간이 빠르기 때문이다.
(아마 이 글을 보는 대부분의 사람들은 표준시간대가 한국 표준시(UTC+09:00)로 설정되어 있을 것이다.)
그렇다면 한국 시간은 어찌 구하는가?
const now = new Date();
const utc = now.getTime() + (now.getTimezoneOffset() * 60 * 1000);
//1673289904842 << 이런 형태의 값을 구할 수 있음
먼저 UTC 시간을 구한다.
UTC 시간이란 1970년 1월 1일로부터 현재까지 1673289904842 밀리초가 지났다는 뜻이다.
const koreaTimeDiff = 9 * 60 * 60 * 1000;
// 한국 시간은 UTC보다 9시간 빠름(9시간의 밀리세컨드 표현)
한국 시간은 UTC보다 9시간 빠르기 때문에 UTC <-> 한국 시간간 차이를 밀리세컨드로 구한다.
const korNow = new Date(utc+koreaTimeDiff)
위에서 구한 UTC와 한국 시간 밀리초를 더해 Date함수를 호출한다.
const now = new Date();
const utc = now.getTime() + (now.getTimezoneOffset() * 60 * 1000);
const koreaTimeDiff = 9 * 60 * 60 * 1000;
const korNow = new Date(utc+koreaTimeDiff);
function getWesternAge(birthday) {
//한국 시간 구하기
const now = new Date();
const utc = now.getTime() + (now.getTimezoneOffset() * 60 * 1000);
const koreaTimeDiff = 9 * 60 * 60 * 1000;
const korNow = new Date(utc+koreaTimeDiff);
const birthYMD = [String(birthday.getFullYear()), String(birthday.getMonth()+1), String(birthday.getDate())]
const nowYMD = [String(korNow.getFullYear()), String(korNow.getMonth()+1), String(korNow.getDate())]
console.log(birthYMD, nowYMD)
//태어난 월, 일이 현재 월, 일보다 크거나 같으면 만 나이 계산
//한국은 1살부터 시작이기 때문에
//오늘 날짜가 생일을 지났으면 현재연도 - 출생연도 -1, 그렇지 않으면 -2
if(birthYMD[2] >= nowYMD[2] && birthYMD[1] >= nowYMD[1]) {
return nowYMD[0] - birthYMD[0] -1;
} else {
return nowYMD[0] - birthYMD[0] -2;
}
}
console.log(getWesternAge(new Date("1993-11-23T00:45:06.562Z")))
//결과 : 29