UNPKG

2.15 kBJavaScriptView Raw
1// Copyright 2017-2022 @polkadot/util authors & contributors
2// SPDX-License-Identifier: Apache-2.0
3import { objectSpread } from "./object/spread.js";
4const HRS = 60 * 60;
5const DAY = HRS * 24;
6const ZERO = {
7 days: 0,
8 hours: 0,
9 milliseconds: 0,
10 minutes: 0,
11 seconds: 0
12};
13/**
14 * @name addTime
15 * @summary Add together two Time arrays
16 */
17
18function addTime(a, b) {
19 return {
20 days: a.days + b.days,
21 hours: a.hours + b.hours,
22 milliseconds: a.milliseconds + b.milliseconds,
23 minutes: a.minutes + b.minutes,
24 seconds: a.seconds + b.seconds
25 };
26}
27
28function extractDays(milliseconds, hrs) {
29 const days = Math.floor(hrs / 24);
30 return addTime(objectSpread({}, ZERO, {
31 days
32 }), extractTime(milliseconds - days * DAY * 1000));
33}
34
35function extractHrs(milliseconds, mins) {
36 const hrs = mins / 60;
37
38 if (hrs < 24) {
39 const hours = Math.floor(hrs);
40 return addTime(objectSpread({}, ZERO, {
41 hours
42 }), extractTime(milliseconds - hours * HRS * 1000));
43 }
44
45 return extractDays(milliseconds, hrs);
46}
47
48function extractMins(milliseconds, secs) {
49 const mins = secs / 60;
50
51 if (mins < 60) {
52 const minutes = Math.floor(mins);
53 return addTime(objectSpread({}, ZERO, {
54 minutes
55 }), extractTime(milliseconds - minutes * 60 * 1000));
56 }
57
58 return extractHrs(milliseconds, mins);
59}
60
61function extractSecs(milliseconds) {
62 const secs = milliseconds / 1000;
63
64 if (secs < 60) {
65 const seconds = Math.floor(secs);
66 return addTime(objectSpread({}, ZERO, {
67 seconds
68 }), extractTime(milliseconds - seconds * 1000));
69 }
70
71 return extractMins(milliseconds, secs);
72}
73/**
74 * @name extractTime
75 * @summary Convert a quantity of seconds to Time array representing accumulated {days, minutes, hours, seconds, milliseconds}
76 * @example
77 * <BR>
78 *
79 * ```javascript
80 * import { extractTime } from '@polkadot/util';
81 *
82 * const { days, minutes, hours, seconds, milliseconds } = extractTime(6000); // 0, 0, 10, 0, 0
83 * ```
84 */
85
86
87export function extractTime(milliseconds) {
88 return !milliseconds ? ZERO : milliseconds < 1000 ? objectSpread({}, ZERO, {
89 milliseconds
90 }) : extractSecs(milliseconds);
91}
\No newline at end of file