Click a token to insert it into the format string. Examples use the reference date and locale.
| Token | Example | Meaning | Day.js |
|---|---|---|---|
| Year and quarter | |||
| Four-digit year | core | ||
| Two-digit year | core | ||
| Quarter (1–4) | advancedFormat | ||
| not in Day.js | Quarter, ordinal | not in Day.js | |
| Month | |||
| Month (1–12) | core | ||
| not in Day.js | Month, ordinal | not in Day.js | |
| Month, two digits | core | ||
| Month, short name | core | ||
| Month, full name | core | ||
| Day of month and year | |||
| Day of month | core | ||
| Day of month, ordinal | advancedFormat | ||
| Day of month, two digits | core | ||
| not in Day.js | Day of year | not in Day.js | |
| not in Day.js | Day of year, three digits | not in Day.js | |
| Day of week | |||
| Day of week (0 = Sunday) | core | ||
| Weekday, shortest name | core | ||
| Weekday, short name | core | ||
| Weekday, full name | core | ||
| not in Day.js | Day of week, by locale | not in Day.js | |
| not in Day.js | ISO day of week (1 = Monday) | not in Day.js | |
| Week | |||
| Week of year, by locale | advancedFormat + weekOfYear | ||
| Week of year, ordinal | advancedFormat + weekOfYear | ||
| Week of year, two digits | advancedFormat + weekOfYear | ||
| ISO week of year | advancedFormat + isoWeek | ||
| ISO week, two digits | advancedFormat + isoWeek | ||
| Week-numbering year, by locale | advancedFormat + weekYear | ||
| ISO week-numbering year | advancedFormat + isoWeek | ||
| Hour | |||
| Hour, 0–23 | core | ||
| Hour, 00–23 | core | ||
| Hour, 1–12 | core | ||
| Hour, 01–12 | core | ||
| Hour, 1–24 | advancedFormat | ||
| Hour, 01–24 | advancedFormat | ||
| Minute and second | |||
| Minute | core | ||
| Minute, two digits | core | ||
| Second | core | ||
| Second, two digits | core | ||
| not in Day.js | Tenths of a second | not in Day.js | |
| not in Day.js | Hundredths of a second | not in Day.js | |
| Milliseconds | core | ||
| AM / PM | |||
| AM / PM | core | ||
| am / pm | core | ||
| Time zone | |||
| UTC offset, ±HH:mm | core | ||
| UTC offset, ±HHmm | core | ||
| Time zone abbreviation | advancedFormat + timezone | ||
| Time zone name | advancedFormat + timezone | ||
| Unix time | |||
| Unix seconds | advancedFormat | ||
| Unix milliseconds | advancedFormat | ||
| Localized formats | |||
| Localized time | localizedFormat | ||
| Localized time with seconds | localizedFormat | ||
| Localized numeric date | localizedFormat | ||
| Localized date with month name | localizedFormat | ||
| Localized date and time | localizedFormat | ||
| Localized date and time with weekday | localizedFormat | ||
| Short numeric date | localizedFormat | ||
| Short date with month name | localizedFormat | ||
| Short date and time | localizedFormat | ||
| Short date and time with weekday | localizedFormat | ||
| Escaping | |||
| Text in square brackets is printed as is | core | ||
Leave empty to parse ISO 8601.
Each row shifts the reference date, then describes it relative to the reference with from() and calendar().
| Shift | from(ref) | calendar(ref) |
|---|---|---|
| .add(-45, 'second') | ||
| .add(-10, 'minute') | ||
| .add(-3, 'hour') | ||
| .add(-1, 'day') | ||
| .add(-5, 'day') | ||
| .add(-3, 'month') | ||
| .add(-2, 'year') | ||
| .add(30, 'minute') | ||
| .add(2, 'day') | ||
| .add(1, 'month') |
Everyday tasks with live results. “Try” loads one into the code runner below.
| Task | Day.js |
|---|---|
Format the current time | dayjs().format('YYYY-MM-DD HH:mm:ss')→ |
Add days | dayjs('2023-01-01').add(1, 'day').format('YYYY-MM-DD')→ |
Time from now Day.js: relativeTime | dayjs().subtract(7, 'day').fromNow()→ |
First day of this month | dayjs().startOf('month').format('YYYY-MM-DD')→ |
Last day of this year | dayjs().endOf('year').format('YYYY-MM-DD')→ |
Start of this week (locale aware) | dayjs().startOf('week').format('YYYY-MM-DD ddd')→ |
Days between two dates | dayjs().diff(dayjs('2022-01-01'), 'day')→ |
Days in this month | dayjs().daysInMonth()→ |
Quarter of the year Day.js: quarterOfYear | dayjs().quarter()→ |
Calendar time Day.js: calendar | dayjs().add(1, 'day').calendar()→ |
Is a date between two others Day.js: isBetween | dayjs('2024-12-31').isBetween('2024-01-01', '2025-01-01')→ |
Is it today Day.js: isToday | dayjs().isToday()→ |
Is it a leap year Day.js: isLeapYear | dayjs('2024-01-01').isLeapYear()→ |
Validate a date strictly Day.js: customParseFormat | dayjs('2023-02-30', 'YYYY-MM-DD', true).isValid()→ |
Parse a custom format Day.js: customParseFormat | dayjs('13/10/2026 14:30', 'DD/MM/YYYY HH:mm').format()→ |
Unix timestamp in seconds | dayjs().unix()→ |
Current time in UTC Day.js: utc | dayjs.utc().format()→ |
Time in another time zone Day.js: utc + timezone + advancedFormat | dayjs().tz('America/New_York').format('YYYY-MM-DD HH:mm z')→ |
Humanize a duration Day.js: duration + relativeTime | dayjs.duration(90, 'minutes').humanize()→ |
Add a month at the end of a month | dayjs('2026-01-31').add(1, 'month').format('YYYY-MM-DD')→ |
Call add() without reassigning | (() => { const d = dayjs('2026-01-01'); d.add(1, 'day'); return d.format('YYYY-MM-DD') })()→ |
Type an expression that uses dayjs. It runs right here in your browser, with every plugin from the recipes enabled and the locale above.
Try Day.js formatting, parsing, relative time and durations against a date you choose, with output that updates as you type. Each result comes with the import and dayjs.extend() lines it needs, and a token table shows which plugin every format token requires.
Set the Reference date and time (or click Now), pick a Locale, and turn on Treat as UTC if your code uses dayjs.utc().
Type a pattern into Format string or click a preset; click any token in Format tokens to insert it at the cursor.
Copy the generated code under the Output, which already includes the plugin imports it needs.
In Parse playground, enter a Date string and an Expected format, and turn on Strict parsing to reject dates that don’t exist.
Click Try on any of the Recipes to load it into the Code runner, then edit it and watch the result update.
The Day.js column of Format tokens says core or names the plugin, for example advancedFormat for Do, Q and X, or localizedFormat for L and LLLL. The code snippet adds the matching import and dayjs.extend() lines for you.
This playground loads every plugin. Day.js core only replaces the tokens it knows, so without advancedFormat Q stays as Q and Do becomes the day number followed by a stray o. Extend the plugin the table names; a few Moment tokens, such as DDD or E, don’t exist in Day.js at all.
Without strict mode, Day.js rolls an impossible day over into the next month. Turn on Strict parsing (the third argument, true, with the customParseFormat plugin) and the same input is reported as invalid.
Wrap it in square brackets. For example, [Week] W, GGGG prints the word Week followed by the ISO week number and year.
No. Day.js, its plugins and locale files run inside this page, and your expression is evaluated in your browser with every plugin used by the recipes enabled.
The Time in another time zone recipe shows dayjs().tz() with the utc and timezone plugins. To compare several zones side by side, use the Time Zone Converter.