@toreda/time
Version:
Simple, small footprint library for common time operations and converting between units of time.
44 lines (43 loc) • 1.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.canConvert = void 0;
exports.timeConvert = timeConvert;
const utils_1 = require("./utils");
const conversions_1 = require("./conversions");
/**
* @deprecated Use `TimeUtils.canConvert` instead. This re-export will be removed in a future major release.
*/
exports.canConvert = utils_1.TimeUtils.canConvert;
/**
* Convert value to a different time unit.
* @param from `TimeUnit` to convert from.
* @param to `TimeUnit` to convert to.
* @param value value to convert
* @param decimals (optional) Decimals to use for precision.
*/
function timeConvert(from, to, value, decimals) {
if (!utils_1.TimeUtils.canConvert(from, to, value)) {
return null;
}
if (value === 0 || from === to) {
return value;
}
const factor = conversions_1.timeConversions[from][to];
if (typeof factor !== 'number' || !isFinite(factor)) {
return null;
}
const result = value * factor;
if (!isFinite(result) || !utils_1.TimeUtils.withinSafeRange(result)) {
return null;
}
if (Number.isInteger(result)) {
return result;
}
const decimalCount = utils_1.TimeUtils.resolveDecimals(decimals);
const rounded = utils_1.TimeUtils.roundToDecimals(result, decimalCount);
if (rounded !== 0) {
return rounded;
}
const preserved = Number(result.toPrecision(Math.max(decimalCount, 1)));
return isFinite(preserved) ? preserved : null;
}