@toreda/time
Version:
Simple, small footprint library for common time operations and converting between units of time.
69 lines (68 loc) • 1.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.timeConvert = exports.canConvert = void 0;
const defaults_1 = require("../defaults");
const conversions_1 = require("./conversions");
const supported_1 = require("./unit/supported");
/**
* Check whether timeConvert can convert between the provided units.
* @param from
* @param to
* @param value
* @returns
*/
function canConvert(from, to, value) {
if (!(0, supported_1.timeUnitSupported)(from)) {
return false;
}
if (!(0, supported_1.timeUnitSupported)(to)) {
return false;
}
if (typeof value !== 'number' || isNaN(value)) {
return false;
}
if (!isFinite(value)) {
return false;
}
if (value > Number.MAX_SAFE_INTEGER) {
return false;
}
if (value < Number.MIN_SAFE_INTEGER) {
return false;
}
return true;
}
exports.canConvert = canConvert;
/**
* Convert value to a different time unit.
* @param from
* @param to
* @param value
* @param decimals
* @returns
*/
function timeConvert(from, to, value, decimals) {
const decimalCount = typeof decimals === 'number' ? decimals : defaults_1.Defaults.Math.Precision.Base;
if (!canConvert(from, to, value)) {
return null;
}
if (value === 0) {
return 0;
}
if (from === to) {
return value;
}
const conversionFactor = conversions_1.timeConversions[from][to];
const result = value * conversionFactor;
if (isNaN(result)) {
return null;
}
if (result < Number.MIN_SAFE_INTEGER || result > Number.MAX_SAFE_INTEGER) {
return null;
}
if (Math.floor(result) === result) {
return result;
}
return Number.parseFloat(result.toFixed(decimalCount));
}
exports.timeConvert = timeConvert;