fixServerDate
서버에서 받은 한국시간(UTC+0 형식) 데이터를 실제 UTC로 정규화하는 함수입니다.
Parameters
이름 | 타입 | 설명 | 기본값 |
---|---|---|---|
date | Date | 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 문자열