UNPKG

1.61 kBJavaScriptView Raw
1// Copyright 2017-2022 @polkadot/util authors & contributors
2// SPDX-License-Identifier: Apache-2.0
3const MIN_MS = 60 * 1000;
4const HR_MS = MIN_MS * 60;
5const DAY_MS = HR_MS * 24;
6const ZERO = {
7 days: 0,
8 hours: 0,
9 milliseconds: 0,
10 minutes: 0,
11 seconds: 0
12};
13/** @internal */
14
15function 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/** @internal */
25
26
27function 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 * @name extractTime
62 * @summary Convert a quantity of seconds to Time array representing accumulated {days, minutes, hours, seconds, milliseconds}
63 * @example
64 * <BR>
65 *
66 * ```javascript
67 * import { extractTime } from '@polkadot/util';
68 *
69 * const { days, minutes, hours, seconds, milliseconds } = extractTime(6000); // 0, 0, 10, 0, 0
70 * ```
71 */
72
73
74export function extractTime(milliseconds) {
75 return !milliseconds ? ZERO : milliseconds < 1000 ? add({
76 milliseconds
77 }, ZERO) : extractSecs(milliseconds);
78}
\No newline at end of file