mirror of
https://github.com/cupcakearmy/uhrwerk.git
synced 2024-12-22 07:26:24 +00:00
156 lines
3.3 KiB
Markdown
156 lines
3.3 KiB
Markdown
# uhrwerk 🕰
|
|
|
|
![package size](https://img.shields.io/bundlephobia/min/uhrwerk?style=flat)
|
|
![downloads badge](https://img.shields.io/npm/dt/uhrwerk)
|
|
![types badge](https://img.shields.io/npm/types/uhrwerk)
|
|
![version badge](https://img.shields.io/npm/v/uhrwerk)
|
|
|
|
Minimal time duration utility. Replacement for MomentJS Durations. If you are looking into the time component of MomentJS check out this awesome library [dayjs](https://github.com/iamkun/dayjs).
|
|
|
|
📦 It's **tiny**: [2kB](https://bundlephobia.com/package/uhrwerk@latest) vs moment js [295kB](https://bundlephobia.com/result?p=moment@latest)
|
|
|
|
🌈 No dependencies, types included.
|
|
|
|
## Quickstart 🚀
|
|
|
|
```typescript
|
|
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
|
|
|
|
```javascript
|
|
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
|
|
|
|
```javascript
|
|
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
|
|
|
|
```javascript
|
|
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
|
|
|
|
```javascript
|
|
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
|
|
|
|
```javascript
|
|
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
|
|
|
|
```javascript
|
|
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
|
|
|
|
```javascript
|
|
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'
|
|
```
|