1 |
|
2 |
|
3 | const MIN_MS = 60 * 1000;
|
4 | const HR_MS = MIN_MS * 60;
|
5 | const DAY_MS = HR_MS * 24;
|
6 | const ZERO = {
|
7 | days: 0,
|
8 | hours: 0,
|
9 | milliseconds: 0,
|
10 | minutes: 0,
|
11 | seconds: 0
|
12 | };
|
13 |
|
14 |
|
15 | function add(a, b) {
|
16 | return {
|
17 | days: (a.days || 0) + b.days,
|
18 | hours: (a.hours || 0) + b.hours,
|
19 | milliseconds: (a.milliseconds || 0) + b.milliseconds,
|
20 | minutes: (a.minutes || 0) + b.minutes,
|
21 | seconds: (a.seconds || 0) + b.seconds
|
22 | };
|
23 | }
|
24 |
|
25 |
|
26 |
|
27 | function extractSecs(ms) {
|
28 | const s = ms / 1000;
|
29 |
|
30 | if (s < 60) {
|
31 | const seconds = ~~s;
|
32 | return add({
|
33 | seconds
|
34 | }, extractTime(ms - seconds * 1000));
|
35 | }
|
36 |
|
37 | const m = s / 60;
|
38 |
|
39 | if (m < 60) {
|
40 | const minutes = ~~m;
|
41 | return add({
|
42 | minutes
|
43 | }, extractTime(ms - minutes * MIN_MS));
|
44 | }
|
45 |
|
46 | const h = m / 60;
|
47 |
|
48 | if (h < 24) {
|
49 | const hours = ~~h;
|
50 | return add({
|
51 | hours
|
52 | }, extractTime(ms - hours * HR_MS));
|
53 | }
|
54 |
|
55 | const days = ~~(h / 24);
|
56 | return add({
|
57 | days
|
58 | }, extractTime(ms - days * DAY_MS));
|
59 | }
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 |
|
72 |
|
73 |
|
74 | export function extractTime(milliseconds) {
|
75 | return !milliseconds ? ZERO : milliseconds < 1000 ? add({
|
76 | milliseconds
|
77 | }, ZERO) : extractSecs(milliseconds);
|
78 | } |
\ | No newline at end of file |