small-date v2.0.1
small-date
A tiny (0.8kb) date formatting library with built-in i18n support.
Why?
There are several date formatting libraries out there. It all started with Moment, while nowadays smaller alternatives such as date-fns, DayJS and Luxon among others are raising in popularity. While date-fns already comes in a really small format, it was still way to big for my most common use case: Format a date with a given pattern. So I created this tiny library as an attempt to solve this specific problem with as little bytes as possible.
How it works
I was using Intl.DateTimeFormat previously and really liked it. So I had the idea to use that under the hood while providing a nice API that accepts a pattern in a widely used format. The nice thing about Intl.DateTimeFormat is that it has built-in i18n support.
Browser Support
It works in all modern browsers.
However, if you need to support IE11, pick one of the libraries mentioned above!
Installation
yarn add small-dateUsage
The libraries exports a single function that accepts the following parameters:
| Parameter | Type | Description |
|---|---|---|
| Date | Date | The date that is formatted |
| Pattern | string | The pattern in which the date should be formatted |
| Config | Object | A config option that accepts a locale and a timeZone |
import { format } from 'small-date'
// Wednesday 03 March 2021, 11:45 am
format(new Date(), 'DDD dd MMMM yyyy, hh:mm a')
// Mittwoch 03 März 2021, 11:45
format(new Date(), 'DDD dd MMMM yyyy, HH:mm', {
locale: 'de-DE',
})Escaping Text
Sometimes we want to add arbitary text into our pattern. The problem is: Words break if they include tokens. Therefore, it is safest to escape all words with " quotes.
import { format } from 'small-date'
// Today is Wednesday the 03. of March
format(new Date(), '"Today is" DDD "the" dd. "of" MMMM')TimeZone
We can pass a timeZone to the configuration to get the locale date at this particular zone.
import { format } from 'small-date'
// Wednesday 03 March 2021, 09:45 pm
format(new Date(), 'DDD dd MMMM yyyy, hh:mm a', {
timeZone: 'Australia/Sydney',
})Pattern Tokens
All examples below use the following date:
new Date(2021, 2, 3, 18, 7, 8, 9)and theen-USlocale.
| Token | Description | Example |
|---|---|---|
| D | Weekday, 1 letter | W |
| DD | Weekday, 3 letters | Wed |
| DDD | Weekday, long | Wednesday |
| d | Day of the month, no padding | 3 |
| dd | Day of the month, padded to 2 | 03 |
| M | Month, numeric | 3 |
| MM | Month, 2 digits | 03 |
| MMM | Month, 3 letters | Mar |
| MMMM | Month, long | March |
| y | Year, numeric | 2021 |
| yy | Year, 2 digits | 21 |
| yyyy | Year, numeric | 2021 |
| h | Hours, no padding | 6 |
| hh | Hours, padded to 2 | 06 |
| H | Hours in 24-format, no padding | 18 |
| HH | Hours in 24-format, padded to 2 | 18 |
| m | Minutes, no padding | 7 |
| m | Minutes, padded to 2 | 07 |
| s | Seconds, no padding | 8 |
| ss | Seconds, padded to 2 | 08 |
| S | Milliseconds, no padding | 9 |
| SS | Milliseconds, padded to 2 | 09 |
| SSS | Milliseconds, padded to 3 | 009 |
| G | Era, narrow | A |
| GG | Era, short | AD |
| GGG | Era, long | Anno Domino |
| Z | Time zone, short | GMT+1 |
| ZZ | Time short, long | Central European Standard Time |
| P | Period of the day, narrow | in the morning |
| PP | Period of the day, short | in the morning |
| PPP | Period of the day, long | in the morning |
| a | Meridiem | pm |
License
small-date is licensed under the MIT License. Documentation is licensed under Creative Common License. Created with ♥ by @robinweser and all the great contributors.