Skip to content

negateDuration

negateDuration(value: string): string
import { negateDuration } from "@northguild/gmt/duration/calculate";

Flip the sign of an ISO 8601 duration string.

  • Uses Temporal.Duration.from and .negated, then .toString() to re-emit.
  • Negating is a pure sign flip on every component, so it never needs relativeTo — calendar-unit durations round-trip through it fine, unlike addDuration/durationAs.
  • A zero-length duration has no sign to flip and comes back as “PT0S”, the canonical spelling Temporal emits for every zero duration (so “P0D” also renders “PT0S”).
  • Returns “” when value is not a valid ISO 8601 duration string.
Parameter Type Description
value string ISO 8601 duration string

ISO 8601 duration string with the opposite sign, or “” on invalid input

negateDuration("P1DT2H") // "-P1DT2H"
negateDuration("-P1DT2H") // "P1DT2H"
negateDuration("P1Y2M") // "-P1Y2M" (no relativeTo needed)
negateDuration("PT0S") // "PT0S"
negateDuration("not a duration") // ""

duration/calculate/negateDuration.ts