기간 제한하기(javascript, UTC)

개요

이번 회사 내 작업 중, 이벤트 기간을 구분하여 서비스 로직을 작동하도록 구현해야 했습니다.
그 작업을 바탕으로 생각을 정리하며 글을 써보려 합니다.

로직 작성

아래와 같이 구현했었는데요. Date의 getTime 메서드로 밀리세컨트의 크기를 비교하는 식으로 진행했습니다.

const requestTime = new Date().getTime();
const eventStart = new Date(EVENT_YEAR, EVENT_MONTH - 1, EVENT_DAY, EVENT_HOUR, EVENT_MINUTES, ...).getTime();
const eventEnd = new Date(...).getTime();

서버에는 미들웨어를 따로 작성해서 핸들링 파이프라인으로 진행했습니다.
클라이언트에도 같이 적용했었습니다.

이슈

클라이언트에도 같이 적용했었습니다.

이슈는 앞에서 언급한 것과 같이 클라이언트에 Date를 사용할 때, 알 수 있었습니다. 사용자가 한국이 아닌 곳에서 접속한다면 해당 지역의 날짜와 동일하게 되는 것이였습니다. 서비스가 글로벌이였다면, 무관할 수도 있다고 생각이 듭니다.

하지만 작업하는 서비스는 한국 날짜를 기준으로 해야하기에 수정해야 했습니다.

이슈 수정

UTC 시간으로 변경 후, 한국 시간으로 만춰줍니다.

const date = new Date(); // 현재
const dateUtcTime = date.getTime() + (date.getTimezoneOffset() * 60 * 1000); // UTC 시간대로 맞춰줍니다.
const korTimeDiff = 9 * 60 * 60 * 1000;
const dateKorTime = dateUtc + korTimeDiff; // 한국 시간은 UTC보다 9시간 빠릅니다.

특정 시간대도 위와 같이 Date를 구해주면 됩니다.
Date.UTC 메서드를 사용해도 됩니다.

const date = Date.UTC(2022, 10, 26);
const korTimeDiff = 9 * 60 * 60 * 1000;
const dateKorTime = date - korTimeDiff;

댓글남기기