UNPKG

1.57 kBJavaScriptView Raw
1const MIN_MS = 60 * 1000;
2const HR_MS = MIN_MS * 60;
3const DAY_MS = HR_MS * 24;
4const ZERO = { days: 0, hours: 0, milliseconds: 0, minutes: 0, seconds: 0 };
5/** @internal */
6function add(a, b) {
7 return {
8 days: (a.days || 0) + b.days,
9 hours: (a.hours || 0) + b.hours,
10 milliseconds: (a.milliseconds || 0) + b.milliseconds,
11 minutes: (a.minutes || 0) + b.minutes,
12 seconds: (a.seconds || 0) + b.seconds
13 };
14}
15/** @internal */
16function extractSecs(ms) {
17 const s = ms / 1000;
18 if (s < 60) {
19 const seconds = ~~s;
20 return add({ seconds }, extractTime(ms - (seconds * 1000)));
21 }
22 const m = s / 60;
23 if (m < 60) {
24 const minutes = ~~m;
25 return add({ minutes }, extractTime(ms - (minutes * MIN_MS)));
26 }
27 const h = m / 60;
28 if (h < 24) {
29 const hours = ~~h;
30 return add({ hours }, extractTime(ms - (hours * HR_MS)));
31 }
32 const days = ~~(h / 24);
33 return add({ days }, extractTime(ms - (days * DAY_MS)));
34}
35/**
36 * @name extractTime
37 * @summary Convert a quantity of seconds to Time array representing accumulated {days, minutes, hours, seconds, milliseconds}
38 * @example
39 * <BR>
40 *
41 * ```javascript
42 * import { extractTime } from '@polkadot/util';
43 *
44 * const { days, minutes, hours, seconds, milliseconds } = extractTime(6000); // 0, 0, 10, 0, 0
45 * ```
46 */
47export function extractTime(milliseconds) {
48 return !milliseconds
49 ? ZERO
50 : milliseconds < 1000
51 ? add({ milliseconds }, ZERO)
52 : extractSecs(milliseconds);
53}