@polkadot/util
Version:
A collection of useful utilities for @polkadot
99 lines (83 loc) • 2.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.extractTime = extractTime;
var _spread = require("./object/spread");
// Copyright 2017-2022 @polkadot/util authors & contributors
// SPDX-License-Identifier: Apache-2.0
const HRS = 60 * 60;
const DAY = HRS * 24;
const ZERO = {
days: 0,
hours: 0,
milliseconds: 0,
minutes: 0,
seconds: 0
};
/**
* @name addTime
* @summary Add together two Time arrays
*/
function addTime(a, b) {
return {
days: a.days + b.days,
hours: a.hours + b.hours,
milliseconds: a.milliseconds + b.milliseconds,
minutes: a.minutes + b.minutes,
seconds: a.seconds + b.seconds
};
}
function extractDays(milliseconds, hrs) {
const days = Math.floor(hrs / 24);
return addTime((0, _spread.objectSpread)({}, ZERO, {
days
}), extractTime(milliseconds - days * DAY * 1000));
}
function extractHrs(milliseconds, mins) {
const hrs = mins / 60;
if (hrs < 24) {
const hours = Math.floor(hrs);
return addTime((0, _spread.objectSpread)({}, ZERO, {
hours
}), extractTime(milliseconds - hours * HRS * 1000));
}
return extractDays(milliseconds, hrs);
}
function extractMins(milliseconds, secs) {
const mins = secs / 60;
if (mins < 60) {
const minutes = Math.floor(mins);
return addTime((0, _spread.objectSpread)({}, ZERO, {
minutes
}), extractTime(milliseconds - minutes * 60 * 1000));
}
return extractHrs(milliseconds, mins);
}
function extractSecs(milliseconds) {
const secs = milliseconds / 1000;
if (secs < 60) {
const seconds = Math.floor(secs);
return addTime((0, _spread.objectSpread)({}, ZERO, {
seconds
}), extractTime(milliseconds - seconds * 1000));
}
return extractMins(milliseconds, secs);
}
/**
* @name extractTime
* @summary Convert a quantity of seconds to Time array representing accumulated {days, minutes, hours, seconds, milliseconds}
* @example
* <BR>
*
* ```javascript
* import { extractTime } from '@polkadot/util';
*
* const { days, minutes, hours, seconds, milliseconds } = extractTime(6000); // 0, 0, 10, 0, 0
* ```
*/
function extractTime(milliseconds) {
return !milliseconds ? ZERO : milliseconds < 1000 ? (0, _spread.objectSpread)({}, ZERO, {
milliseconds
}) : extractSecs(milliseconds);
}