This library builds on the fantastic date-fns and adds some enhanced features for formatting dates and durations.
npm install @goomba/date-fns
# or
yarn add @goomba/date-fns
import { formatDuration } from '@goomba/date-fns'
formatDuration({ days: 3 }, "d 'days ago'");
//=> "3 days ago"
As date-fns/format
allows convenient formatting of a Date, formatDuration
allows the same for Durations. Nearly any format is supported because you define it!
const formattedDuration = formatDuration(duration, "h 'hours,' m 'minutes,' s 'seconds'");
The underlying data this function operates on is a date-fns Duration object. Each property is mapped to a specific token that will be replaced in the given format string.
Property | Token |
---|---|
Years | y |
Months | M |
Days | d |
Hours | h |
Minutes | m |
Seconds | s |
Just like date-fns/format
, repeating a token will add a leading zero (only) when applicable.
h => 7
hh => 07
m => 26
mm => 26
Another sweet feature is the ability to format only a portion of a duration and let the function determine what the amount should be.
Example
const duration = {
hours: 1,
minutes: 30,
seconds: 0
};
formatDuration(duration, "h 'hour,' m 'minutes,' s 'seconds'");
//=> "1 hour, 30 minutes, 0 seconds"
formatDuration(duration, "m 'minutes,' s 'seconds'");
//=> "90 minutes, 0 seconds"
formatDuration(duration, "s 'seconds'");
//=> "5400 seconds"
Note
At this time, the larger parts of unused Duration will be added to the next largest token specified.
- Smaller parts are left out. In other words, similar to rounding down. Open an issue if you are interested in rounding up in some manner.
- Currently dynamic calculation can not be disabled. Open an issue if you are interested in this feature.
formatDuration(duration, format);
Name | Type | Description |
---|---|---|
duration | Duration | the duration to format |
format | string | the string of tokens |
Type | Type |
---|---|
String | the formatted duration string |
Type | Description |
---|---|
TypeError | Parameter duration is required. |
TypeError | Parameter format is required. |
RangeError | format string contains an unescaped latin alphabet character |