반응형

JavaScript에서 날짜와 시간을 다루다 보면, 타임존(Timezone) 관련 코드에서 종종 헷갈리는 순간이 있습니다.
특히 dayjs를 사용할 때, 아래 두 코드의 차이를 아는 것이 정말 중요해요:

const t1 = dayjs('202505271800', 'YYYYMMDDHH').tz("Asia/Seoul");
const t2 = dayjs.tz('202505271800', 'YYYYMMDDHH', 'Asia/Seoul');

겉보기엔 비슷해 보이지만, 내부적으로는 아주 다른 동작을 하게 됩니다.
이 글에서는 그 차이를 최대한 쉽게 설명해볼게요.


우선 두 코드의 차이부터 볼게요

① dayjs('202505271800', 'YYYYMMDDHH').tz("Asia/Seoul")

  • 이 코드는 먼저 '202505271800'을 UTC 기준으로 해석합니다.
    즉, '2025년 5월 27일 18시'는 UTC 시간대의 6시라고 인식합니다.
  • 그 다음, .tz("Asia/Seoul")을 적용하면서 UTC 6시 → KST 기준 15시로 변환됩니다.
  • 결과적으로 날짜와 시간이 변형됩니다.

② dayjs.tz('202505271800', 'YYYYMMDDHH', 'Asia/Seoul')

  • 이 코드는 처음부터 '202505271800'을 "Asia/Seoul" 시간대로 해석합니다.
  • 즉, '2025년 5월 27일 18시 (한국시간 기준)' 그대로 유지됩니다.
  • 시간 값은 그대로이고, 정확한 타임존이 적용됩니다.

예시로 비교해볼게요

// 1번 방식 (시간이 바뀜)
const t1 = dayjs('202505271800', 'YYYYMMDDHH').tz("Asia/Seoul");
console.log(t1.format()); // 2025-05-28T03:00:00+09:00 ❌ 원래 18시 아님

// 2번 방식 (정확하게 해석됨)
const t2 = dayjs.tz('202505271800', 'YYYYMMDDHH', 'Asia/Seoul');
console.log(t2.format()); // 2025-05-27T18:00:00+09:00 ✅ 원하던 시간

그래서 어떤 걸 써야 할까?

목적추천 방식

 

목적 추천 방식
입력된 시간이 이미 KST라고 가정하고 싶다면 ✅ dayjs.tz(..., ..., 'Asia/Seoul')
입력된 시간이 UTC인데 KST로 변환해서 보여주고 싶다면 ✅ .tz('Asia/Seoul')
 

 


📝 마무리 정리

  • dayjs(...).tz(...)는 UTC로 해석 후 시간대 변환
  • dayjs.tz(..., ..., timezone)는 처음부터 그 시간대를 기준으로 파싱
  • 사용자 입력이 "한국 시간"이라는 것이 확실하다면, 무조건 dayjs.tz(...)를 쓰는 것이 안전합니다
728x90
반응형

+ Recent posts