[Node] dayjs 시간 설정하기

0

한국 시간 기준으로 야간인지 아닌지를 판별해야 하는 경우가 있는데 기존 코드가 제대로 동작하지 않았다.

기존의 dayJs

import * as dayjs from 'dayjs';
import 'dayjs/locale/ko';
dayjs.locale('ko');

export default dayjs;

locale은 ko로 포맷을 해줄 뿐, timezone이 변경되지 않는다.

변경 후

import * as dayjs from 'dayjs';
import 'dayjs/locale/ko';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';

dayjs.locale('ko');

dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.tz.setDefault('Asia/Seoul');

export default dayjs;

이렇게 설정을 해줘야하는데, 다음과 같은 에러가 났다.

Cannot read property '$i' of undefined

아래 코드로 변경했더니 잘 적용된다.

import * as dayjs from 'dayjs';
import 'dayjs/locale/ko';
import * as utc from 'dayjs/plugin/utc';
import * as timezone from 'dayjs/plugin/timezone';

dayjs.locale('ko');

dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.tz.setDefault('Asia/Seoul');

export default dayjs;

참고한 깃헙 이슈
https://github.com/iamkun/dayjs/issues/1494

+) tz의 setDefault는 글로벌하게 타임존을 바꿔주는 것이 아니기 때문에, 실 사용부에서 다음과 같이 써주어야 한다.

예시

const isNight = 8 > dayjs().tz().hour() || dayjs().tz().hour() > 21;

+) TZ 환경 변수를 추가해주면 글로벌하게 타임존을 설정할 수 있다고 한다. 참고

profile
𝙸 𝚊𝚖 𝚊 𝗙𝗘 𝚍𝚎𝚟𝚎𝚕𝚘𝚙𝚎𝚛 𝚠𝚑𝚘 𝚕𝚘𝚟𝚎𝚜 𝗼𝘁𝘁𝗲𝗿. 🦦💛

0개의 댓글