Skip to content

JavaScript에서 KST, TOMORROW 구하는 방법

palsa131 edited this page Dec 20, 2021 · 1 revision

배경

이번 프로젝트에서 게시물을 맡길 때 찾을 수 있는 시간의 최솟값을 내일로 지정하고, 서버에서는 12시가 지나면 게시물의 상태값을 바꿔주기로 하였다.

문제 상황

서버에서는 KST를 기준으로 게시물을 찾을 수 있는 날이 되면 상태를 변경하도록 스케쥴링한 상태였고, 페이지에서는 현재 날짜와 시간을 new Date()로 받아와서 사용 하였는데, 이 함수는 사용자의 PC에 설정된 시간을 가져오는 것이라 사용자가 설정한 시간이 다르면 return받는 값이 달라지고, 서버에 string으로 전달을 하기 때문에 시간대에 따라 서버의 시간보다 과거의 시간대가 입력 될 수 있었다.

해결 방법

그런 이유료 new Date()로 KST를 구해서 사용해야 하는 상황이었고 방법은 다음과 같다.

1. 현재 시간 (locale) 가져오기

const localeDate = new Date();

2. UTC 시간 계산

const utc = localeDate.getTime() + (localeDate.getTimezoneOffset() * 60 * 1000);

utc = 현재 설정된 PC시간 + UTC와 PC시간의 차이

  1. getTime() 함수는 '1970년 1월 1일 00:00:00 UTC'로부터 주어진 시간 사이의 경과시간을 밀리초로 리턴합니다.
  2. getTimezoneOffset() 함수는 현재 사용자의 PC 설정 시간대로부터 UTC 시간까지의 차이를 '분' 단위로 리턴합니다. (한국 시간은 UTC+9 이기 때문에 -540(-9시간) 을 리턴합니다)
  3. (* 60 * 1000) 는 위의 두 함수의 retur값이 '밀리초'와 '분' 단위이기 때문에 비교하기 위해서는 단위를 맞춰야 합니다.

3. UTC 를 KST(UTC+9) 로 그리고 TOMORROW

const KT_TIME_DIFF = 9 * 60 * 60 * 1000; 
const TOMORROW_TIME_DIFF = 24 * 60 * 60 * 1000;
const kst = new Date( utc + KR_TIME_DIFF);
const kstTomorrow = new Date( utc + KR_TIME_DIFF + TOMORROW_TIME_DIFF);

위와같은 방법으로 kst와 kstTomorrow 를구했고 사용자 설정에 관계없이 날짜를 설정하여 문제 상황을 해결 하였다.

Clone this wiki locally