
최근에 토이 프로젝트를 진행하면서 날짜 데이터를 사용자에게 보여줘야 하는 부분이 생겼다. 처음에는 JavaScript의 기본 Date 객체를 사용하려 했지만, 날짜 포맷팅과 로케일 지원이 번거로웠다. 그래서 좀 더 편리한 방법을 찾다 보니 date-fns, moment.js, Day.js 같은 라이브러리를 알게 되었다. 검색을 통해 각 라이브러리의 장단점을 비교한 후, 모듈화와 성능 면에서 장점이 있는 date-fns를 선택하게 되었다.
date-fns는 JavaScript의 날짜 및 시간 처리를 쉽게 할 수 있도록 도와주는 경량 라이브러리이다. 함수형 스타일을 기반으로 설계되어 있으며, 필요한 기능만 가져와서 사용할 수 있어 번들 크기를 줄이는 데 유리하다.
import { format } from 'date-fns'date-fns-tz 패키지를 추가하면 지원yarn add date-fns
import { format } from "date-fns";
const date = new Date(2025, 2, 9); // 2025년 3월 9일
console.log(format(date, "yyyy-MM-dd")); // "2025-03-09"
console.log(format(date, "PPPP")); // "Sunday, March 9th, 2025"
import { addDays, subMonths } from "date-fns";
const today = new Date();
console.log(addDays(today, 10)); // 오늘 날짜에서 10일 뒤
console.log(subMonths(today, 2)); // 오늘 날짜에서 2달 전
import { isBefore, isAfter } from "date-fns";
const date1 = new Date(2025, 2, 9);
const date2 = new Date(2025, 5, 15);
console.log(isBefore(date1, date2)); // true (date1이 더 이전 날짜)
console.log(isAfter(date1, date2)); // false
import { format } from "date-fns";
import { ko, enUS } from "date-fns/locale";
const date = new Date(2025, 2, 9);
console.log(format(date, "PPPP", { locale: ko })); // "2025년 3월 9일 일요일"
console.log(format(date, "PPPP", { locale: enUS })); // "Sunday, March 9th, 2025"
import { differenceInDays, differenceInHours } from "date-fns";
const start = new Date(2025, 2, 1);
const end = new Date(2025, 2, 9);
console.log(differenceInDays(end, start)); // 8일 차이
console.log(differenceInHours(end, start)); // 192시간 차이
| 라이브러리 | 크기 | 모듈화 | 성능 | 유지보수 상태 | 사용 방식 |
|---|---|---|---|---|---|
| moment.js | 🚨 큼 (200KB+) | ❌ 없음 | 🐌 느림 | ⚠️ 유지보수 중단(Deprecated) | OOP 스타일(객체 기반) |
| Day.js | ✅ 작음 (2KB) | ❌ 없음 | 🚀 빠름 | ✅ 유지보수 중 | moment.js와 유사한 API |
| date-fns | ✅ 작음 (24KB) | ✅ 있음 | 🚀 빠름 | ✅ 유지보수 중 | 함수형 스타일 (필요한 것만 가져오기) |
date-fns 또는 Day.js 추천Day.js로 마이그레이션 고려date-fns가 적합Day.js 선택date-fns, moment.js, Day.js는 각각 장단점이 있지만, moment.js는 더 이상 추천되지 않으며, date-fns 또는 Day.js 중에서 선택하는 것이 좋다. 프로젝트의 특성에 맞게 적절한 라이브러리를 선택하면 날짜 처리가 훨씬 수월해질 것이다.