@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
JavaScript
;
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;
}