Small & sweet date-range formatting library
npm install little-date
When displaying date-ranges in UI, they are often too long, repetitive, and hard to read. little-date solves this problem by making date ranges short, readable, and easy to understand.
Consider this example:
``javascript${from.toLocaleString()} - ${to.toLocaleString()}
// Typical long format
console.log();
// Output: "1/1/2024, 00:00:00 AM - 1/12/2024, 23:59:59 PM"
// With little-date
console.log(formatDateRange(from, to));
// Output: "Jan 1 - 12"
`
little-date is based on date-fns. It supports localization and can be used in both Node.js and the browser.
Examples dates āØ
- Jan 1 - 12Jan 3 - Apr 20
- January 2023
- Q1 2023
-
Wasn't that easy to read? You can find a full list of formatting examples here.
`js
import { formatDateRange } from 'little-date';
const from = new Date('2023-01-01T00:00:00.000Z');
const to = new Date('2023-01-12T23:59:59.999Z');
formatDateRange(from, to); // Outputs: "Jan 1 - 12"
`
#### With pnpm
`sh`
pnpm i little-date
#### With NPM
`sh`
npm i little-date
| Description | Output |
| ----------------------------------------- | ---------------------------------------- |
| Multiple days, same month | Jan 1 - 12 |Jan 3 - Apr 20
| Multiple days, different months | |Sun, Jan 1
| Full day | |Jan 1 '22 - Jan 20 '23
| Range spanning different years | |Jan 1 - 12, 2022
| Multiple days, same month, past year | |Sat, Jan 1, 2022
| Full day, past year | |2023
| Special cases | |
| Full year | |Q1 2023
| Quarter range | |January 2023
| Full month | |Jan - Feb 2023
| Full months | |12am - 2:30pm
| With time | |
| Today, different hours | |Jan 1, 12:11am - 2:30pm
| Same day, different hours | |Jan 1, 0:11 - 14:30
| Same day, different hours, 24-hour format | |Jan 1, 12pm - 12:59pm
| Hour difference within a day | |Jan 1, 12:11am - Jan 2, 2:30pm
| Different days with time included | |Jan 1 '22, 12:11am - Jan 2 '23, 2:30pm
| Different years with time | |Jan 1 '22 - Jan 2 '23
| Different years, no time | |
Most of the formatting behavior is opinionated and can't be changed. However, there are some options that can be used to customize the output.
`js
import { formatDateRange } from 'little-date';
// ...
formatDateRange(from, to, {
locale: 'de-AT', // Overwrite the default locale
includeTime: false, // Prevent time from being displayed
today: new Date(), // Overwrite the default "today" date, useful for testing
separator: '-', // Overwrite the default separator. E.g. from "Jan 1 - 12" to "Jan 1 to 12"
timezone: 'Europe/Vienna', // Overwrite the timezone used for displaying times
});
`
To keep things simple, there is minimal customization offered by little-date.
For more extensive customization beyond the provided options, it's recommended to copy the implementation from src/format-date-range.ts into your own repository. This allows you to modify the formatting logic to precisely fit your needs.
We welcome contributions! If you'd like to improve little-date` or have any feedback, feel free to open an issue or submit a pull request.
MIT