Skip to content

getDurationUnit

Playground

call
result 
getDurationUnit(value: string, unit: DateTimeDurationUnit): number
import { getDurationUnit } from "@northguild/gmt/duration/calculate";

Read a single component out of an ISO 8601 duration string.

  • Uses Temporal.Duration.from and reads the named field directly — this is the value as stored, not a converted total: getDurationUnit(“PT90M”, “hours”) is 0, because “PT90M” holds 90 in its minutes field and nothing in its hours field. Use durationAs for a converted total.
  • Never needs relativeTo: reading a field is not a unit conversion, so calendar units (years/months/weeks) work here even though they require an anchor in durationAs.
  • Temporal balances fractional units at parse time, so getDurationUnit(“PT1.5H”, “minutes”) is 30 — the input’s own precision, not the caller’s spelling of it, decides the fields.
  • A negative duration stores every field as negative, so this returns a negative number for each nonzero component of “-P1DT2H”, not just the leading one.
  • Returns null when value is not a valid duration string or unit is not a valid DateTimeDurationUnit.
Parameter Type Description
value string ISO 8601 duration string
unit DateTimeDurationUnit DateTimeDurationUnit to read (“years” | “months” | “weeks” | “days” | “hours” | “minutes” | “seconds” | “milliseconds” | “microseconds” | “nanoseconds”)

the component’s value, or null on invalid input

getDurationUnit("P1DT2H30M", "hours") // 2
getDurationUnit("P1DT2H30M", "minutes") // 30
getDurationUnit("PT90M", "hours") // 0 (stored as minutes, not converted)
getDurationUnit("-P1DT2H", "hours") // -2
getDurationUnit("P1M", "months") // 1 (no relativeTo needed to read a field)
getDurationUnit("PT0S", "days") // 0
getDurationUnit("not a duration", "hours") // null
getDurationUnit("P1D", "fortnights") // null

duration/calculate/getDurationUnit.ts