@lonu/stc
Version:
A tool for converting OpenApi/Swagger/Apifox into code.
46 lines (45 loc) • 1.44 kB
JavaScript
/**
* Convert time duration to a human readable string: 5d1h20m30s
*
* - milliseconds The number to format, unit milliseconds
*/
export function prettyTime(milliseconds, options = {
withSpaces: false,
toFixedVal: 1,
longFormat: false,
}) {
let second = milliseconds / 1000;
if (second < 60) {
return unitToString(second, 0, options);
}
let minute = Math.floor(second / 60);
second %= 60;
if (minute < 60) {
return unitToString(minute, 1, options) + unitToString(second, 0, options);
}
let hour = Math.floor(minute / 60);
minute %= 60;
if (hour < 24) {
return (unitToString(hour, 2, options) +
unitToString(minute, 1, options) +
unitToString(second, 0, options));
}
const day = Math.floor(hour / 24);
hour %= 24;
return (unitToString(day, 3, options) +
unitToString(hour, 2, options) +
unitToString(minute, 1, options) +
unitToString(second, 0, options));
}
function unitToString(val, i, { withSpaces = false, toFixedVal = 1, longFormat = false }) {
const units = longFormat
? ["second", "minute", "hour", "day"]
: ["s", "m", "h", "d"];
const unit = longFormat && (val >= 2 || (val > 1 && toFixedVal > 0))
? units[i] + "s"
: units[i];
if (i == 0) {
return val.toFixed(toFixedVal) + unit;
}
return val + (withSpaces ? unit + " " : unit);
}