-
-
Notifications
You must be signed in to change notification settings - Fork 310
/
secs.ts
51 lines (46 loc) · 1.07 KB
/
secs.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
const minute = 60
const hour = minute * 60
const day = hour * 24
const week = day * 7
const year = day * 365.25
const REGEX =
/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i
export default (str: string): number => {
const matched = REGEX.exec(str)
if (!matched) {
throw new TypeError('Invalid time period format')
}
const value = parseFloat(matched[1])
const unit = matched[2].toLowerCase()
switch (unit) {
case 'sec':
case 'secs':
case 'second':
case 'seconds':
case 's':
return Math.round(value)
case 'minute':
case 'minutes':
case 'min':
case 'mins':
case 'm':
return Math.round(value * minute)
case 'hour':
case 'hours':
case 'hr':
case 'hrs':
case 'h':
return Math.round(value * hour)
case 'day':
case 'days':
case 'd':
return Math.round(value * day)
case 'week':
case 'weeks':
case 'w':
return Math.round(value * week)
// years matched
default:
return Math.round(value * year)
}
}