UNPKG

pomeranian-durations

Version:

An immutable duration library based on the ISO-8601 format for durations.

181 lines (145 loc) 5.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.asDecimalHours = exports.asDecimalMinutes = exports.asDecimalSeconds = exports.asDecimalMilliseconds = exports.asDecimalMicroseconds = exports.asHours = exports.asMinutes = exports.asSeconds = exports.asMilliseconds = exports.asMicroseconds = void 0; var _constants = require("./constants"); var _find = require("./find"); /** * Helpers to convert between different units. * @name default */ var asUnit = function asUnit(isoString, divider) { var microseconds = asMicroseconds(isoString); return microseconds / divider; }; var containsDateUnits = function containsDateUnits(isoString) { return [(0, _find.findDays)(isoString), (0, _find.findWeeks)(isoString), (0, _find.findMonths)(isoString), (0, _find.findYears)(isoString)].some(function (element) { return element; }); }; /** * Converts a isoDuration to microseconds. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in microseconds * @example * asMicroseconds('PT2s') // => 2000000 */ var asMicroseconds = function asMicroseconds(isoString) { if (containsDateUnits(isoString)) { throw new Error('Can\'t convert from date units.'); } return [((0, _find.findSeconds)(isoString) || 0) * _constants.ONE_SECOND, ((0, _find.findMinutes)(isoString) || 0) * _constants.ONE_MINUTE, ((0, _find.findHours)(isoString) || 0) * _constants.ONE_HOUR].reduce(function (sum, seconds) { return sum + seconds; }); }; /** * Converts a isoDuration to milliseconds. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in milliseconds * @example * asMilliseconds('PT2s') // => 2000 */ exports.asMicroseconds = asMicroseconds; var asMilliseconds = function asMilliseconds(isoString) { return asUnit(isoString, _constants.ONE_MILLISECOND); }; /** * Converts a isoDuration to seconds. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in seconds * @example * asSeconds('PT2s') // => 2 */ exports.asMilliseconds = asMilliseconds; var asSeconds = function asSeconds(isoString) { return asUnit(isoString, _constants.ONE_SECOND); }; /** * Converts a isoDuration to minutes. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in minutes * @example * asMinutes('PT1h1m') // => 61 */ exports.asSeconds = asSeconds; var asMinutes = function asMinutes(isoString) { return asUnit(isoString, _constants.ONE_MINUTE); }; /** * Converts a isoDuration to hours. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in hours * @example * asHours('PT60m') // => 1 */ exports.asMinutes = asMinutes; var asHours = function asHours(isoString) { return asUnit(isoString, _constants.ONE_HOUR); }; /** * Converts a duration to decimal microseconds. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in decimal microseconds * @example * asDecimalMicroseconds('PT1m1s') // => 0.000061 */ exports.asHours = asHours; var asDecimalMicroseconds = function asDecimalMicroseconds(isoString) { return asSeconds(isoString) / _constants.ONE_MILLISECOND / _constants.ONE_MILLISECOND; }; /** * Converts a duration to decimal milliseconds. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in decimal milliseconds * @example * asDecimalMilliseconds('PT1m1.1s') // => 0.0611 */ exports.asDecimalMicroseconds = asDecimalMicroseconds; var asDecimalMilliseconds = function asDecimalMilliseconds(isoString) { return asSeconds(isoString) / _constants.ONE_MILLISECOND; }; /** * Converts a duration to decimal seconds. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in decimal seconds * @example * asDecimalSeconds('PT1m1s') // => 61 */ exports.asDecimalMilliseconds = asDecimalMilliseconds; var asDecimalSeconds = function asDecimalSeconds(isoString) { return asSeconds(isoString); }; /** * Converts a duration to decimal minutes. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in decimal minutes * @example * asDecimalMinutes('PT1m1s') // => 1.0166666666666666 */ exports.asDecimalSeconds = asDecimalSeconds; var asDecimalMinutes = function asDecimalMinutes(isoString) { return asDecimalSeconds(isoString) / 60; }; /** * Converts a duration to decimal hours. Throws an error when the duration * contains a date unit because those can't be converted reliably to time units. * @param isoString {string} an ISO8601 duration * @returns {number} duration in decimal hours * @example * asDecimalHours('PT1m1s') // => 0.016944444444444443 */ exports.asDecimalMinutes = asDecimalMinutes; var asDecimalHours = function asDecimalHours(isoString) { return asDecimalMinutes(isoString) / 60; }; exports.asDecimalHours = asDecimalHours;