packagesutilsdatefixServerDate

fixServerDate

서버에서 받은 한국시간(UTC+0 형식) 데이터를 실제 UTC로 정규화하는 함수입니다.

Parameters

이름타입설명기본값
dateDate | string서버에서 받은 날짜 (한국시간이지만 UTC+0로 표현된 데이터)-

Return

Date - 실제 UTC로 정규화된 Date 객체

Usage

import { fixServerDate } from '@teamsparta/utils';
 
// 서버에서 받은 한국시간 데이터 (UTC+0 형식)
const serverDate = '2024-01-01T09:00:00+00:00';
 
// 실제 UTC로 정규화
const fixedDate = fixServerDate(serverDate);
console.log(fixedDate.toISOString()); // "2024-01-01T00:00:00.000Z"

Background

DB에 저장된 날짜는 한국시간(KST)이지만 UTC+0 형식으로 잘못 표현되어 있는 특수한 상황을 위한 함수입니다.

예를 들어:

  • 실제 의미: 한국시간 2024년 1월 1일 오전 9시
  • 저장된 형식: "2024-01-01T09:00:00+00:00" (UTC+0로 표현)
  • 문제: Date 객체로 변환 시 타임존에 따라 잘못된 시간 해석

Example

기본 사용법

// 서버에서 받은 데이터
const serverDate = '2024-05-29T19:49:58+00:00'; // 한국시간 19시 49분
 
// UTC로 정규화 (9시간 차이)
const fixedDate = fixServerDate(serverDate);
console.log(fixedDate.toISOString()); // "2024-05-29T10:49:58.000Z"

현재 시간과 비교

const serverDate = '2024-01-01T09:00:00+00:00';
const fixedDate = fixServerDate(serverDate);
 
// 정확한 시간 계산 가능
const now = new Date();
const timeDiff = now.getTime() - fixedDate.getTime();
const daysDiff = Math.floor(timeDiff / (1000 * 60 * 60 * 24));

Date 객체로도 사용 가능

const serverDate = new Date('2024-01-01T09:00:00+00:00');
const fixedDate = fixServerDate(serverDate);

한국 시간으로 표시

const serverDate = '2024-01-01T09:00:00+00:00';
const fixedDate = fixServerDate(serverDate);
 
// 한국 시간으로 표시
const koreanTime = new Intl.DateTimeFormat('ko-KR', {
  timeZone: 'Asia/Seoul',
  dateStyle: 'long',
  timeStyle: 'medium',
}).format(fixedDate);
 
console.log(koreanTime); // "2024년 1월 1일 오전 9:00:00"

주의사항

  • 특수 목적 함수: 오직 서버에서 받은 특정 형식(한국시간이지만 UTC+0로 표현)의 데이터에만 사용하세요
  • 일반 Date 객체 사용 금지: 정상적인 Date 객체에 사용하면 9시간이 잘못 차감됩니다
  • 타임존 독립적: 전 세계 어디서 실행해도 동일한 UTC 결과를 반환합니다
  • 불변성: 원본 Date 객체는 변경되지 않고 새로운 Date 객체가 반환됩니다

When to Use

사용해야 하는 경우:

  • 서버/DB에서 받은 한국시간 데이터가 UTC+0 형식으로 저장된 경우
  • 다른 지역 사용자와의 정확한 시간 계산이 필요한 경우
  • 국제화된 서비스에서 일관된 시간 처리가 필요한 경우

사용하지 말아야 하는 경우:

  • 정상적인 UTC 시간이 이미 올바르게 표현된 Date 객체
  • 다른 타임존의 시간 데이터
  • 이미 올바른 타임존 정보가 포함된 ISO 문자열