pomeranian-durations
Version:
An immutable duration library based on the ISO-8601 format for durations.
181 lines (145 loc) • 5.92 kB
JavaScript
;
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;