cupcakearmy / uhrwerk

Time utility

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

uhrwerk πŸ•°

package size downloads badge types badge version badge

Minimal time duration utility. Replacement for MomentJS Durations. If you are looking into the time component of MomentJS check out this awesome library dayjs.

πŸ“¦ It's tiny: 2kB vs moment js 295kB

🌈 No dependencies, types included.

Quickstart πŸš€

import { Duration } from 'uhrwerk'

const d = new Duration(10, 'days')
d.subtract(1, 'week')
d.add(5, 'minutes')

d.humanize() // '3 days'
d.minutes() // 5
d.asMinute() // 4325

d.subtract(3, 'days')
d.humanize() // 'a few minutes'

Reference πŸ“’

new Duration(amount, interval)

  • amount: number
  • interval:
    • millisecond, milliseconds, ms
    • second, seconds, s
    • minute, minutes, m
    • hour, hours, h
    • day, days, d
    • week, weeks, w
    • year, years, y
Examples
const a = new Duration(1, 'day')
const b = new Duration(2, 'days')
const c = new Duration(0.5, 'year')
const d = new Duration(Date.now(), 'ms')

.add(amount, interval)

Adds a specified amount to an existing duration

Example
const a = new Duration(1, 'day')
a.add(12, 'hours')
a.asHour() // 36

.subtract(amount, interval)

Subtracts a specified amount to an existing duration

Example
const a = new Duration(1, 'day')
a.subtract(12, 'hours')
a.asHour() // 12

Getters

Gets the amount of time interval, not the total time

  • .milliseconds()
  • .seconds()
  • .minutes()
  • .hours()
  • .days()
  • .weeks()
  • .years()
Example
const a = new Duration(1, 'day')
a.days() // 1
a.add(5, 'minutes')
a.days() // 1
a.add(1, 'year')
a.days() // 1
a.add(24, 'hours')
a.days() // 2

As interval

Calculates the time duration as a time interval.

  • .asMilliseconds()
  • .asSeconds()
  • .asMinutes()
  • .asHours()
  • .asDays()
  • .asWeeks()
  • .asYears()
Example
const a = new Duration(1, 'day')
a.asHours() // 24

.humanize()

This functions takes a duration and tries to make a human readable version out of it.

Example
const a = new Duration(4, 'seconds')
a.humanize() // 'a moment'
a.add(5, 'minutes')
a.humanize() // 'a few minutes'
Own rules / i18n

If you want to pass a different humanize function you can. The order of the array is important. The first match will return, like in a standard server router. The first argument is a function that takes the duration and returns a boolean. The second takes also matched duration and returns a string for the user.

Example
const humanizer = [
  [(d) => d.days() > 1, (d) => `${d.days()} days`],
  [(d) => d.days() > 0, (d) => `1 day`],
  [() => true, () => 'catch all, below 1 day'],
]

const a = new Duration(2, 'days')
a.humanize(humanizer) // '2 days'
a.subtract(1, 'day')
a.humanize(humanizer) // '1 day'
a.subtract(12, 'hours')
a.humanize(humanizer) // 'catch all, below 1 day'

About

Time utility

License:MIT License


Languages

Language:TypeScript 64.8%Language:JavaScript 35.2%