แแ แ 2KB แฅแป แจแแ! แณแแแแ Moment.jsแ แจแฐแซ โ แแแ แฅแ แฅแ
แ แแฃแ!
Parse แแตแจแ ยท Format แแแจแญ ยท Manipulate แแตแจแ ยท Relative Time ยท Timezone โ แแแแ แซแซแฐแฐ! โฐ
2kB immutable date library alternative to Moment.js with the same modern API.
Day.js โ JavaScript แแญ Date แฅแ Timeแ (แแ แฅแ แฐแแตแ) แแแตแฐแณแฐแญ แจแแซแแแแ แแแ แซแ (2KB!) library แแ! Moment.js 200KB+ แฒแแ Day.js แแ แฐแแณแณแญ API แญแ 2KB แฅแป แแ! Immutable แตแแแ โ แแแ date object แ แญแแจแญแแฃ แ แฒแต object แแ แจแแแแฐแแข
Parse any string/timestamp โ format โ manipulate โ compare โ timezone!
npm install dayjs
import dayjs from 'dayjs' โ default 2KB ยท plugins แฒแจแแฉ แแต แ แแต แแ แ แญแจแแซแ
import moment from 'moment'; // โ 230KB แจ bundle แแ แ! // โ Mutable แแ โ แแแแ แณแณ แญแแญแจแแ (side effects แ แแ)! // โ Tree-shaking แจแแแ! // โ แจ 2020 แแแฎ Deprecated แแแ! moment().format('YYYY-MM-DD'); moment().add(7, 'days'); moment().fromNow();
import dayjs from 'dayjs'; // โ 2KB แฅแป แแ! // โ Immutable แแ โ pure functions แญแ แแแ! // โ แจ Plugin แ แฐแซแญ แ แแ! // โ แ แแแ Active development แแญ แแ! dayjs().format('YYYY-MM-DD'); dayjs().add(7, 'day'); dayjs().fromNow();
const now = dayjs(); now.year() // โ 2026 (แแแฑแ แซแแฃแ) now.month() // โ 0-11 (0=Jan) (แแฉแ แซแแฃแ) now.date() // โ 1-31 (แแแ แซแแฃแ) now.day() // โ 0-6 (0=Sun) (แจแณแแแฑแ แแ แซแแฃแ) now.hour() // โ 0-23 (แฐแแฑแ แซแแฃแ) now.minute() // โ 0-59 (แฐแแแแ แซแแฃแ) now.second() // โ 0-59 (แฐแจแแฑแ แซแแฃแ) now.unix() // โ timestamp (แ แฐแจแแต) now.valueOf() // โ ms timestamp (แ แแแฐแจแแต) now.toDate() // โ JS Date object แญแแแณแ now.toISOString() // โ ISO 8601 แแญแแต แญแแแณแ
dayjs() โ แแแแแแ แแญแแต Date แแฐ Day.js object แแแจแญ (Parse แแตแจแ)! String แฃ Timestamp แฃ JS Date แฃ แแแ แญแฐแซแ!
// ๐ แแฌแ แแแแแต dayjs() // โ แ แแ แซแแแ แฐแแต แญแแแณแ new Date() // แจ JS Date แแญ แฐแแณแณแญ แแ // ๐ String parse แแแตแจแ dayjs('2026-05-16') // ISO date dayjs('2026-05-16T10:30:00') // ISO datetime dayjs('2026-01-01') // แ แฒแต แแแต // ๐ข Unix Timestamp แแแแ แฅ dayjs(1715817600000) // แ แแแฐแจแแต (milliseconds) dayjs.unix(1715817600) // แ แฐแจแแต (seconds) // ๐ฆ JS Date objectแ แแฐ Day.js แแแแจแญ dayjs(new Date(2026, 4, 16)) // แแญ แจ 0 แตแแแแแญ 4 แแแต May แแ // ๐ฏ Object parse แแแตแจแ (Plugin แแซแตแแแแ แญแฝแแ) dayjs({ year:2026, month:4, day:16, hour:10, minute:30 }) // โ แตแญแญแแ Date แแแแ แแแจแแแฅ (Is Valid?) dayjs('2026-bad').isValid() // โ false dayjs('2026-05-16').isValid() // โ true
format() โ Dateแ แแฐ แแแแฝแแต string แแญแแต แแแจแญ! Format tokens แ แแ แแ แ แแแ แแตแฐแซแจแ แญแปแแ!
const d = dayjs('2026-05-16T10:30:45'); d.format('YYYY-MM-DD') // '2026-05-16' d.format('DD/MM/YYYY') // '16/05/2026' d.format('MMMM D, YYYY') // 'May 16, 2026' d.format('ddd, MMM D') // 'Sat, May 16' d.format('HH:mm:ss') // '10:30:45' d.format('h:mm A') // '10:30 AM' d.format('x') // Unix ms timestamp d.format('Q') // '2' (Quarter/แฉแฅ แแแต) d.toISOString() // ISO 8601 string
| Token | แแณแ | แตแญแแ |
|---|---|---|
| YYYY | 2026 | 4-digit year (แแแฐ แแ แจแต) |
| MM | 05 | 2-digit month (01-12) (แแญ) |
| MMMM | May | Full month name (แจแแฉ แแ แตแ) |
| DD | 16 | 2-digit day (01-31) (แแ) |
| ddd | Sat | Short weekday (แจแณแแแฑ แแ แ แ แญแฉ) |
| dddd | Saturday | Full weekday (แจแณแแแฑ แแ แ แแ) |
| HH | 10 | 24-hour (00-23) (แ 24 แฐแแต แแญแแต) |
| hh | 10 | 12-hour (01-12) (แ 12 แฐแแต แแญแแต) |
| mm | 30 | Minutes (00-59) (แฐแแ) |
| ss | 45 | Seconds (00-59) (แฐแจแแต) |
| A | AM/PM | Meridiem upper (แ แแต/แจแฐแแต) |
| x | 1747388400000 | Unix ms (แ แแแฐแจแแต) |
Immutable โ add/subtract/set แแแ แ แฒแต Day.js object แแ แจแแแแฑแต! Original แณแณแ แ แญแแจแญแ! Like strings in JS โ always returns new value.
const today = dayjs(); // immutable แแ! // โ add() (แแแจแแญ) today.add(1, 'day') // แแ today.add(1, 'week') // แจ 1 แณแแแต แ แแ today.add(3, 'month') // แจ 3 แแญ แ แแ today.add(1, 'year') // แจ 1 แแแต แ แแ today.add(90, 'minute') // แจ 90 แฐแแ แ แแ // โ subtract() (แแแแแต) today.subtract(7, 'day') // แจ 7 แแ แ แแต today.subtract(6, 'month') // แจ 6 แแญ แ แแต // ๐ startOf ยท endOf (แแแแชแซ แฅแ แแจแจแป แแแแแต) today.startOf('month') // โ แจแแฉ แแแแชแซ (May 1) today.endOf('month') // โ แจแแฉ แแจแจแป (May 31) today.startOf('week') // โ แจแณแแแฑ แแแแชแซ (Sunday) today.startOf('year') // โ แจแแแฑ แแแแชแซ (Jan 1) // โ๏ธ set() (แจแฐแแฐแแแ แญแแ แฅแป แแแแจแญ) today.set('hour', 9) // โ แฐแแฑแ แแฐ 09:00 แญแแญแซแ today.set('date', 1) // โ แแแ แแฐ 1 แญแแญแซแ // โ๏ธ Chain แแตแจแ (แแซแซแ) แญแปแแ! dayjs().add(1,'month').startOf('month').format('YYYY-MM-DD')
isBefore ยท isAfter ยท isSame โ Datesแ แแแณแฐแชแซ! Deadline แฃ Age check แฃ Date range โ แแแแ แซแแแแแ!
const a = dayjs('2026-01-01'); const b = dayjs('2026-12-31'); // โ๏ธ Comparison (แแแณแฐแญ) a.isBefore(b) // โ true (a แจ b แ แแต แแ) a.isAfter(b) // โ false (a แจ b แ แแ แ แญแฐแแ) a.isSame(b) // โ false (แฅแฉแ แ แญแฐแแ) a.isSame(b, 'year') // โ true (แแแณแธแ แ แแต แแ!) a.isBefore(b, 'month') // โ true (แ แแญ แฒแแณแฐแญ a แญแแตแแ) // โ isBetween (แแซแจแ แแแแ แแแจแแแฅ - plugin แซแตแแแแแ) import isBetween from 'dayjs/plugin/isBetween'; dayjs.extend(isBetween); const check = dayjs('2026-06-15'); check.isBetween(a, b) // โ true (แ a แฅแ b แแซแจแ แแ) check.isBetween(a, b, 'month') // แ แแญ แฐแจแ แแแณแฐแญ // ๐ Real use: Deadline check (แจแแ แแฐแฅ แแจแแแซ) const deadline = dayjs('2026-12-31'); const isPassed = dayjs().isAfter(deadline); // แแแ แ แแแ? const daysLeft = deadline.diff(dayjs(), 'day'); // แตแแต แแ แแจแ?
diff() โ แจแแแต Dates แแฉแแต! แ แแแต แฃ แ แแญ แฃ แ แแ แฃ แ แฐแแต โ แ แแแ แแญแแต แแแซแต แญแปแแ!
const start = dayjs('2026-01-01'); const end = dayjs('2026-05-16'); // diff(date2, unit, float?) end.diff(start, 'day') // โ 135 days (แจแแ แแฉแแต) end.diff(start, 'month') // โ 4 months (แจแแญ แแฉแแต) end.diff(start, 'week') // โ 19 weeks (แจแณแแแต แแฉแแต) end.diff(start, 'hour') // โ 3240 hours (แจแฐแแต แแฉแแต) end.diff(start, 'year') // โ 0 years (แฐแแณแณแญ แแแต แตแแแ) end.diff(start, 'month', true) // โ 4.5 (float/แแฅแฅ แฒแซแตแแแ) // ๐ Age Calculator (แแตแ แแตแซ) const birth = dayjs('2000-05-16'); const age = dayjs().diff(birth, 'year'); console.log(`แแตแ: ${age} แแแต`); // 26 // ๐ฆ Duration Plugin (แจแแญแณ แแ แแแแ) import duration from 'dayjs/plugin/duration'; dayjs.extend(duration); const dur = dayjs.duration(135, 'days'); dur.asHours() // โ 3240 (แแฐ แฐแแต แฒแแจแญ) dur.humanize() // โ '4 months' (แฐแ แแซแแ แ แ แแฝแ แแแฉ)
Day.js แแ package แแแ แซแ แฅแ แตแแฝ แแ! แฐแจแแช Features แฒแซแตแแแแฝแ plugin แตแจแแซแแฝแ โ แซ แฅแป แแ! Tree-shaking แญแฐแแแ โ
relativeTime plugin โ fromNow() / to() โ Dates แฐแ แแซแแ แ แแฐแแฝแ แแแ แญแแญแซแ! Social media แฃ Comments แฃ Timestamps โ แแแแ แซแแแแแ!
import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; dayjs.extend(relativeTime); dayjs().fromNow() // โ 'a few seconds ago' dayjs().subtract(5,'min').fromNow() // โ '5 minutes ago' dayjs().subtract(2,'hour').fromNow() // โ '2 hours ago' dayjs().subtract(3,'day').fromNow() // โ '3 days ago' dayjs().add(1,'week').fromNow() // โ 'in 7 days' dayjs().add(3,'month').fromNow() // โ 'in 3 months' // to() โ แจแ แแต date แ แแแญ แจแแแแ แแ แแแแ const deadline = dayjs('2026-12-31'); dayjs().to(deadline) // โ 'in 7 months'
import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; import timezone from 'dayjs/plugin/timezone'; import utc from 'dayjs/plugin/utc'; import duration from 'dayjs/plugin/duration'; dayjs.extend(relativeTime); dayjs.extend(utc); dayjs.extend(timezone); dayjs.extend(duration); // 1๏ธโฃ Display โ Post timestamp (แฅแแฐ Twitter/Facebook style) export const timeAgo = (date: string) => dayjs(date).fromNow(); // '2026-05-16T08:00:00' โ '2 hours ago' // 2๏ธโฃ Format โ Ethiopian date display (แแ แฅแ แฐแแต แแณแซ) export const formatEt = (date: string) => dayjs(date).format('MMMM D, YYYY ยท HH:mm'); // โ 'May 16, 2026 ยท 10:30' // 3๏ธโฃ Age calculator (แแตแ แแตแซ) export const calcAge = (birth: string) => dayjs().diff(dayjs(birth), 'year'); // 4๏ธโฃ Deadline check (แจแแ แแฐแฅ แแจแแแซ) export const deadlineInfo = (deadline: string) => ({ isPassed: dayjs().isAfter(dayjs(deadline)), daysLeft: dayjs(deadline).diff(dayjs(), 'day'), label: dayjs().to(dayjs(deadline)), }); // 5๏ธโฃ Timezone convert (EAT โ UTC) export const toEAT = (utcDate: string) => dayjs.utc(utcDate).tz('Africa/Addis_Ababa').format('HH:mm'); // 6๏ธโฃ Date range for calendar (แแซแแแฐแญ แจแแแ แแแตแ แแแฃแต) export const getMonthDays = (year: number, month: number) => { const start = dayjs().year(year).month(month).startOf('month'); const end = start.endOf('month'); const days = []; let cur = start; while (cur.isBefore(end) || cur.isSame(end, 'day')) { days.push(cur.format('YYYY-MM-DD')); cur = cur.add(1, 'day'); } return days; // แ แแฉ แแตแฅ แซแแตแ แแแต แ แแ แญแแแณแ };
Moment.js 230KB แฒแแ Day.js 2KB แแ! Immutable แแ โ add(), subtract() แแแ แ แฒแต object แญแแแณแ! Original แณแณแ แ แญแแจแญแ โ แตแ
แฐแต แ แญแแ แญแ!
YYYY-MM-DD ยท HH:mm:ss ยท MMMM D, YYYY โ แจแแแแฝแแตแ format tokens แ แแแ
แ! API responses แแ ISO 8601 แแแ แ แแฃแธแ โ Display แฒแแ format() แฐแ แแ!
fromNow() = "2 minutes ago" แฃ to() = "in 3 months"! แ Comments แฃ Post timestamps แฃ Countdown โ แแแแ แซแแแแแ! Plugin แแจแแญ แฅแป แแ แจแแ แ แ
แฃแฝแ!
dayjs(end).diff(start, 'day') โ Age แฃ Deadline days left แฃ Duration โ แแแแ แญแฐแซแ! float: true แฒแแแฅ decimal (แแฅแฅ) แญแฐแ แแ!
EAT (Ethiopia +03:00)แฃ UTC แฃ US timezones โ timezone + utc plugins แซแตแแแแณแ! API แแ UTC แแแ แ แแ แต แฃ Display แฒแแ แแฐ user timezone convert แญแฐแจแแ!
add() method แแ แญแแแณแ?