UNPKG

@qntm-code/utils

Version:

A collection of useful utility functions with associated TypeScript types. All functions have been unit tested.

75 lines (74 loc) 3.08 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatTime = void 0; const index_js_1 = require("../dates/index.js"); const isNullOrUndefined_js_1 = require("../type-predicates/isNullOrUndefined.js"); /** * Formats a given time to a human readable string */ function formatTime(time, options) { const defaultOptions = { forceAllUnits: false, timeUnit: index_js_1.TimeUnit.Milliseconds, secondsDecimalPlaces: 0, hourSuffix: 'h', minuteSuffix: 'm', secondSuffix: 's', padDecimals: false, }; const { forceAllUnits, timeUnit, secondsDecimalPlaces, hourSuffix, minuteSuffix, secondSuffix, padDecimals } = { ...defaultOptions, ...options, }; const timeMs = (0, index_js_1.unitToMS)(time, timeUnit); const result = []; const hours = Math.floor((0, index_js_1.convertTimeUnit)(timeMs, index_js_1.TimeUnit.Milliseconds, index_js_1.TimeUnit.Hours)); if (forceAllUnits || hours > 0) { result.push(formatUnit(hours, hourSuffix, forceAllUnits)); } let minutes = Math.floor((0, index_js_1.convertTimeUnit)(timeMs - (0, index_js_1.convertTimeUnit)(hours, index_js_1.TimeUnit.Hours, index_js_1.TimeUnit.Milliseconds), index_js_1.TimeUnit.Milliseconds, index_js_1.TimeUnit.Minutes)); const secondsMultiplier = Math.pow(10, secondsDecimalPlaces); let seconds = Math.round((0, index_js_1.convertTimeUnit)(timeMs - (0, index_js_1.convertTimeUnit)(hours, index_js_1.TimeUnit.Hours, index_js_1.TimeUnit.Milliseconds) - (0, index_js_1.convertTimeUnit)(minutes, index_js_1.TimeUnit.Minutes, index_js_1.TimeUnit.Milliseconds), index_js_1.TimeUnit.Milliseconds, index_js_1.TimeUnit.Seconds) * secondsMultiplier) / secondsMultiplier; if (seconds === 60) { seconds = 0; minutes++; } if (forceAllUnits || minutes > 0) { result.push(formatUnit(minutes, minuteSuffix, forceAllUnits)); } if (forceAllUnits || seconds > 0 || (seconds === 0 && minutes === 0 && hours == 0)) { result.push(formatUnit(seconds, secondSuffix, forceAllUnits, secondsDecimalPlaces, padDecimals)); } return result.join(' '); } exports.formatTime = formatTime; /** * Formats time units */ function formatUnit(time, unit, forceAllUnits, secondsDecimalPlaces, padDecimals) { let result = `${time}`; if (secondsDecimalPlaces && secondsDecimalPlaces > 0) { const parts = result.split('.'); let seconds = parts[0]; const decimals = parts[1]; if (forceAllUnits) { seconds = seconds.padStart(2, '0'); } if (padDecimals) { result = `${seconds}.${(parts[1] ?? '0').padEnd(secondsDecimalPlaces, '0')}`; } else if ((0, isNullOrUndefined_js_1.isNullOrUndefined)(decimals)) { result = seconds; } else { result = `${seconds}.${decimals}`; } } else if (forceAllUnits) { result = result.padStart(2, '0'); } result += unit; return result; }