UNPKG

@toreda/time

Version:

Simple, small footprint library for common time operations and converting between units of time.

69 lines (68 loc) 1.82 kB
"use strict"; 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;