
"날짜/시간을 쉽게 다루는 라이브러리"
// 기본 Date - 불편함
const date = new Date("2024-12-09");
const year = date.getFullYear();
const month = date.getMonth() + 1; // 0부터 시작해서 +1 해야 함
const day = date.getDate();
const formatted = `${year}년 ${month}월 ${day}일`;
// "2024년 12월 9일" - 앞에 0 안 붙음
문제점:
import dayjs from "dayjs";
const formatted = dayjs("2024-12-09").format("YYYY년 MM월 DD일");
// "2024년 12월 09일" - 간단함!
export const formatDate = (date: string, format?: string) => {
return dayjs(date).format(format ? format : "YYYY년 MM월 DD일");
};
1) dayjs(date)
dayjs("2024-12-09")
// Day.js 객체로 변환
2) .format()
.format("YYYY년 MM월 DD일")
// "2024년 12월 09일"
format?: string
?: 선택적 파라미터 (안 넣어도 됨)"YYYY년 MM월 DD일" 사용// 사용 예시
formatDate("2024-12-09", "YYYY-MM-DD")
// "2024-12-09"
formatDate("2024-12-09", "YYYY/MM/DD")
// "2024/12/09"
formatDate("2024-12-09", "MM월 DD일")
// "12월 09일"
formatDate("2024-12-09", "YYYY.MM.DD HH:mm:ss")
// "2024.12.09 00:00:00"
| 문자 | 의미 | 예시 |
|---|---|---|
| YYYY | 년도 (4자리) | 2024 |
| YY | 년도 (2자리) | 24 |
| MM | 월 (2자리) | 12 |
| M | 월 (1자리) | 12 |
| DD | 일 (2자리) | 09 |
| D | 일 (1자리) | 9 |
| HH | 시 (24시간, 2자리) | 14 |
| mm | 분 (2자리) | 05 |
| ss | 초 (2자리) | 30 |
// Book.tsx
interface Book {
title: string;
pubDate: string; // "2024-12-09T10:30:00"
}
function BookItem({ book }: { book: Book }) {
return (
<div>
<h3>{book.title}</h3>
<p>출간일: {formatDate(book.pubDate)}</p>
{/* "출간일: 2024년 12월 09일" */}
</div>
);
}
// Order.tsx
function OrderItem({ order }) {
return (
<div>
<p>주문일: {formatDate(order.createdAt, "YYYY.MM.DD HH:mm")}</p>
{/* "주문일: 2024.12.09 14:30" */}
</div>
);
}
import dayjs from "dayjs";
const date1 = dayjs("2024-12-09");
const date2 = dayjs("2024-12-10");
date1.isBefore(date2); // true
date1.isAfter(date2); // false
date1.isSame(date2); // false
// 7일 후
dayjs().add(7, "day").format("YYYY-MM-DD");
// 1개월 전
dayjs().subtract(1, "month").format("YYYY-MM-DD");
// 오늘 날짜
dayjs().format("YYYY-MM-DD");
import relativeTime from "dayjs/plugin/relativeTime";
import "dayjs/locale/ko";
dayjs.extend(relativeTime);
dayjs.locale("ko");
dayjs("2024-12-08").fromNow();
// "1일 전"
dayjs("2024-12-10").fromNow();
// "1일 후"
npm install dayjs
import dayjs from "dayjs";
// 현재 시간
const now = dayjs();
// 특정 날짜
const date = dayjs("2024-12-09");
// 포맷팅
const formatted = dayjs().format("YYYY-MM-DD");
export const formatNumber = (number: number): string => {
return number.toLocaleString();
};
"숫자를 읽기 쉽게 콤마 찍어줌"
formatNumber(1234567);
// "1,234,567"
formatNumber(10000);
// "10,000"
// 책 가격 표시
<p>가격: {formatNumber(book.price)}원</p>
// "가격: 15,000원"
// 재고 수량
<p>재고: {formatNumber(book.stock)}개</p>
// "재고: 1,234개"
src/
utils/
format.ts ← 이 파일
validation.ts
storage.ts
// BookList.tsx
import { formatDate, formatNumber } from "@/utils/format";
function BookList() {
return (
<div>
<p>가격: {formatNumber(book.price)}원</p>
<p>출간: {formatDate(book.pubDate)}</p>
</div>
);
}
// OrderList.tsx
import { formatDate, formatNumber } from "@/utils/format";
function OrderList() {
return (
<div>
<p>주문금액: {formatNumber(order.totalPrice)}원</p>
<p>주문일: {formatDate(order.createdAt, "YYYY.MM.DD")}</p>
</div>
);
}
export const formatDate = (date: string, format?: string) => {
return dayjs(date).format(format ? format : "YYYY년 MM월 DD일");
};
date: string: 날짜 문자열 (필수)format?: string: 포맷 문자열 (선택)string 추론됨// ✅ 정상
formatDate("2024-12-09");
formatDate("2024-12-09", "YYYY-MM-DD");
// ❌ 에러 (타입 불일치)
formatDate(20241209); // string이 아님
formatDate("2024-12-09", 123); // format이 string이 아님
"날짜 다룰 땐 Day.js가 최고!"