@musement/iso-duration v1.0.0
@musement/iso-duration
JS's library created to provide easy API for working with time duration.
Based on ISO 8601.
Inspired by HumanizeDuration and ISO8601-duration.
Installation:
npm i @musement/iso-duration --saveQuick start:
// Import isoDuration and locales
import { isoDuration, en, pl, it } from '@musement/iso-duration'
// Setup locales
// key - string you want to use in `humanize` function
// value - IsoDuration i18n object.
isoDuration.setLocales(
{
en,
pl,
it,
},
{
fallbackLocale: 'en',
}
)
//Create duration object
const duration = isoDuration("P8DT30M")
// OR
const duration = isoDuration({
days: 8,
minutes: 30
})
//Get JS duration object
console.log(duration.parse())
// {
// weeks: 0,
// years: 0,
// months: 0,
// days: 8,
// hours: 0,
// minutes: 30,
// seconds: 0
// }
//Get duration ISO string
console.log(duration.toString())
// P8DT30M
//Humanize duration
console.log(duration.humanize('en'))
// 8 days 30 minutesAPI:
Duration object supports:
- ISO_8601 duration string (
PnYnMnDTnHnMnS,PnW) - JS objects:
{
"weeks": Number,
"years": Number,
"months": Number,
"days": Number,
"hours": Number,
"minutes": Number,
"seconds": Number,
}Example:
import { isoDuration } from '@musement/iso-duration@'
const durationFromString = isoDuration("P8DT30M")
const durationFromObj = isoDuration({
days: 8,
minutes: 30,
})i18n
All languages which are expected to be available in .humanize method needs to be loaded using isoDuration.setLocales
function. Currently, library provides support for languages listed under /src/locales.
import { isoDuration, en, pl, it } from '@musement/iso-duration'
isoDuration.setLocales({
en,
pl,
it,
'en-GB': en,
'en-US': en,
})Configuration
isoDuration.setLocales can take an option object as second argument (optional):
| Key | Type | Description | Default |
|---|---|---|---|
fallbackLocale | String | fallback locale used when an invalid locale is passed to IsoDuration.humanize | undefined |
IsoDuration object:
parse()returnDurationObjwith all time periods represented as JS object
console.log(isoDuration("P8T30M").parse())
// {
// weeks: 0,
// years: 0,
// months: 0,
// days: 8,
// hours: 0,
// minutes: 30,
// seconds: 0
// }toString()returns ISO_8601 string:
console.log(isoDuration("P8T30M").toString())
// P8T30Mhumanize(lang: string, config?: HumanizeConfig)returns duration in human readable way:
⚠ Warning ️⚠ - usedlangneeds to be previously added to the library usingisoDuration.setLocales
console.log(isoDuration("P8T30M").humanize('en'))
// 8 hours 30 minutesHumanizeConfig Object:
{
largest: number
}largest - Reduce number of humanized to N the largest units:
console.log(
isoDuration({
years: 2,
months: 0,
days: 8,
hours: 20,
minutes: 30,
seconds: 15
}).humanize('en', { largest: 2 })
)
// 2 years 8 daysnormalize(date?: Date)returns normalized IsoDuration object:
console.log(isoDuration("PT90M").normalize().parse())
// PT1H30MThis method takes an optional argument date which defines start of duration. It's used to correctly normalize number of days basing on corresponding month's length.
If it's not present normalize function will use current date (new Date()) instead.
Month with 31 days:
console.log("Duration:", isoDuration("P31D").normalize(new Date(2020, 0, 1)).humanize('en'))
//Duration: 31 daysMonth with 29 days:
console.log("Duration:", isoDuration("P31D").normalize(new Date(2020, 1, 1)).humanize('en'))
//Duration: 1 month 2 daysCredits
EvanHahn - author of HumanizeDuration
tolu author of ISO8601-duration