반응형
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
반응형
'개발라이프 > 자바스크립트' 카테고리의 다른 글
TypeScript 전역 설치 vs 로컬 설치 – 무엇을 선택해야 할까? (0) | 2025.04.02 |
---|---|
Node.js에서 ?? (null 병합 연산자) 완전 정리 (0) | 2025.04.01 |
Node.js에서 KST(Korea Standard Time)로 날짜 출력하기 (0) | 2025.03.18 |
Node.js에서 CSV 스트림 처리 시 비동기 이슈 해결법 (0) | 2025.02.25 |
JavaScript에서 부동소수점 연산 오차와 해결 방법 (0) | 2025.02.14 |