Dayjs 로 타임존을 다룰 때 주의해야 할 사항 2가지

뉴우비(newwwbi)·2022년 6월 11일
5
post-thumbnail

1️⃣ timezone 플러그인을 추가할 때는 반드시 utc 플러그인도 함께 추가해야 한다

dayjs 에는 타임존과 관련된 기능이 기본 기능으로 포함되어 있지 않다.
타임존과 관련된 기능을 사용하려면 timezone 플러그인을 추가해줘야 한다.
그런데 timezone 플러그인을 추가할 때 반드시 utc 플러그인도 함께 추가해줘야 한다.
timezone 플러그인이 utc 플러그인에 의존성을 갖고 있기 때문에 utc 플러그인을 추가해주지 않으면 타임존 기능을 사용할 때 에러가 발생한다.

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';

dayjs.extend(utc);
dayjs.extend(timezone);

2️⃣ dayjs.tz.setDefault() 메서드는 dayjs 의 디폴트 타임존을 변경하는 메서드가 아니다

dayjs.tz.setDefault() 메서드로 dayjs 의 디폴트 타임존을 변경할 수 있다고 알고 있었다.
그런데 실제로 테스트해보니 dayjs.tz.setDefault() 메서드로 디폴트 타임존을 변경하더라도 dayjs 에서 사용하는 타임존은 여전히 호스트 시스템의 타임존이었다.

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';

dayjs.extend(utc);
dayjs.extend(timezone);

console.log(dayjs().format()); // 2022-06-11T18:24:42+09:00

dayjs.tz.setDefault('America/New_York');

console.log(dayjs().format()); // 2022-06-11T18:24:42+09:00

알고보니 dayjs.tz.setDefault() 메서드는 dayjs 의 디폴트 타임존을 변경하는 메서드가 아니라 dayjs.tz 함수의 디폴트 타임존을 변경하는 메서드였다.

import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';

dayjs.extend(utc);
dayjs.extend(timezone);

console.log(dayjs().tz().format()); // 2022-06-11T18:24:42+09:00

dayjs.tz.setDefault('America/New_York');

console.log(dayjs().tz().format()); // 2022-06-11T05:24:42-04:00

디폴트 타임존으로 설정한 타임존과 호스트 시스템의 타임존이 항상 똑같이 Asia/Seoul 이다보니 지금까지 이 사실을 몰랐었다...😨

+ 2023년 05월 20일 내용 추가
dayjs 의 디폴트 타임존은 변경할 수 없지만, Node.js 애플리케이션의 타임존은 TZ 환경 변수로 변경할 수 있다. (공식 문서)

예를 들어, 아래와 같이 'TZ' 라는 이름의 환경 변수에 'America/New_York' 을 설정해주면

TZ=America/New_York

Node.js 애플리케이션의 타임존이 뉴욕으로 바뀐다.

import dayjs from 'dayjs';

console.log(dayjs().format()); // 2023-05-20T05:48:59-04:00
profile
배운 지식을 다른 사람과 공유하고 싶습니다

2개의 댓글

comment-user-thumbnail
2023년 5월 17일

선생님..감사합니다...흐긓ㄱ

1개의 답글