UNPKG

@polkadot/util

Version:
91 lines (78 loc) 2.15 kB
// Copyright 2017-2022 @polkadot/util authors & contributors // SPDX-License-Identifier: Apache-2.0 import { objectSpread } from "./object/spread.js"; 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(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(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(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(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 * ``` */ export function extractTime(milliseconds) { return !milliseconds ? ZERO : milliseconds < 1000 ? objectSpread({}, ZERO, { milliseconds }) : extractSecs(milliseconds); }