이전에 페이스북 그룹에서 Moment 프로젝트가 더 이상 유지 보수를 하지 않는다는 글을 봤었다.
실제 프로젝트 상태에 적혀 있었고 신규 프로젝트에서 대체할 모듈을 제시를 하는데 나는 그 중에
맨 처음에 적혀있는 luxon을 사용해보기로 했다.
설치
mt와 비교
가장 큰 차이점은 Moment의 경우 처음 객체를 생성 하고 이후에 추가적인 연산 등의 행위를
하였을 때 원본 객체도 바뀌기 때문에 별도로 clone을 해서 사용을 해야 되는데 인지를 못 해서
실수를 했던 경험이 있는데 luxon의 경우 생성 객체가 불변이기 때문에 별도 작업이 필요가 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| const { DateTime } = require("luxon");
const MomentTimezone = require("moment-timezone");
const date = { mt: MomentTimezone().tz("America/New_York"), luxon: DateTime.fromObject({ zone: "America/New_York" }), };
const mt1 = date.mt.format("YYYY-MM-DD");
const mt2 = date.mt.add(1, "days").format("YYYY-MM-DD");
console.log( `mt: ${mt1}`, `mt2: ${mt2}`, `원본: ${date.mt.format("YYYY-MM-DD")}` );
const luxon1 = date.luxon.toFormat("yyyy-LL-dd");
const luxon2 = date.luxon.plus({ days: 1 }).toFormat("yyyy-LL-dd");
console.log( `luxon1: ${luxon1}`, `luxon2: ${luxon2}`, `원본: ${date.luxon.toFormat("yyyy-LL-dd")}` );
|
기존에 써 봤던 mt 대체 실습
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| const { DateTime } = require("luxon");
const MomentTimezone = require("moment-timezone");
const date = { mt: MomentTimezone().tz("America/New_York"), luxon: DateTime.fromObject({ zone: "America/New_York" }), };
console.log(`mt를 통한 뉴욕 시간: ${date.mt.format("YYYY-MM-DD HH:mm")}`);
console.log( `luxon을 통한 뉴욕 시간: ${date.luxon.toFormat("yyyy-LL-dd HH:mm")}` );
console.log(`mt로 보는 주차(년 기준): ${date.mt.week()}`);
console.log(`luxon으로 보는 주차(년 기준): ${date.luxon.weekNumber}`);
const weekOfMonth = { mt: MomentTimezone().tz("America/New_York").week() - MomentTimezone().tz("America/New_York").startOf("month").week() + 1, luxon: date.luxon.weekNumber - date.luxon.startOf("month").weekNumber + 1, };
console.log(`mt로 보는 주차(월 기준): ${weekOfMonth.mt}`);
console.log(`luxon으로 보는 주차(월 기준): ${weekOfMonth.luxon}`);
const diff = { mt: MomentTimezone.tz("Asia/Seoul").diff( MomentTimezone("2020-10-05 00:00:00").tz("Asia/Seoul") ), luxon: DateTime.fromObject({ zone: "Asia/Seoul" }).diff( DateTime.fromObject({ zone: "Asia/Seoul", year: 2020, month: 10, day: 5, hour: 0, minute: 0, second: 0, }) ).toObject(), };
console.log(`mt로 보는 현재 - 지정된 날 = ts: ${diff.mt}`);
console.log(`luxon으로 보는 현재 - 지정된 날 = ts: ${diff.luxon.milliseconds}`);
|
참고