UNPKG

@burglekitt/gmt

Version:

Temporal-based date and time utilities with timezone support and polyfill integration

33 lines (32 loc) 1.2 kB
import { Temporal } from "@js-temporal/polyfill"; import { isValidDuration } from "../validate/isValidDuration.js"; /** * Return the absolute value of an ISO 8601 duration string. * * - Uses Temporal.Duration.from and .abs, then .toString() to re-emit. * - Like `negateDuration`, this only touches signs, so it never needs `relativeTo` and works * on calendar-unit durations. * - An already-positive duration is returned re-emitted, not rejected — but re-emitted means * canonicalized, so "P0D" comes back as "PT0S". * - Returns "" when `value` is not a valid ISO 8601 duration string. * * @param value ISO 8601 duration string * @returns ISO 8601 duration string with a positive sign, or "" on invalid input * * @example absDuration("-P1DT2H") // "P1DT2H" * @example absDuration("P1DT2H") // "P1DT2H" * @example absDuration("-P1Y2M") // "P1Y2M" (no relativeTo needed) * @example absDuration("PT0S") // "PT0S" * @example absDuration("not a duration") // "" */ export function absDuration(value) { if (!isValidDuration(value)) { return ""; } try { return Temporal.Duration.from(value).abs().toString(); } catch { return ""; } }