intervalFromDurationDate
Signature
Section titled “Signature”intervalFromDurationDate(value: string, duration: string, anchor: "start" | "end", options?: { overflow?: Overflow; }): { start: string; end: string; }import { intervalFromDurationDate } from "@northguild/gmt/plain/interval";Construct a date interval from a single point plus an ISO 8601 duration, anchored at either end.
anchor: "start"treatsvalueas the interval start and addsdurationto get the end.anchor: "end"treatsvalueas the interval end and subtractsdurationto get the start.- Uses
Temporal.PlainDate.prototype.add/.subtract, so calendar units (years/months/weeks) resolve againstvalueitself — no separaterelativeTois needed, unlikeaddDuration. - A negative
duration(e.g."-P1D") can invert the computed span; returns null when that happens, mirroringintervalIntersectionDate’sstart > endrejection. overflow(“constrain” (default) | “reject”) controls out-of-range results, e.g. adding 1 month to Jan 31: “constrain” clamps to Feb 29/28, “reject” returns null.- Accepts a GMT calendar-annotated PlainDate string — E5 (issue #78). The computed endpoint is resolved in
value’s own calendar (norelativeTo/pair-matching question, since there is only one calendar-tagged input) and both endpoints are re-formatted in that calendar, re-derived from the actual result rather than copied fromvalue’s tag (a leap-month or era boundary can fall between them). - Returns null on invalid input (unparseable
value, invalidduration, or ananchorother than"start"/"end").
Parameters
Section titled “Parameters”| Parameter | Type | Description |
|---|---|---|
value |
string |
ISO PlainDate string, optionally calendar-annotated |
duration |
string |
ISO 8601 duration string |
anchor |
"start" | "end" |
“start” | “end” — which endpoint value represents |
Options
Section titled “Options”options
| Option | Type | Default |
|---|---|---|
overflow? |
Overflow |
— |
Returns
Section titled “Returns”{ start, end } with the constructed span, or null on invalid input
Related types
Section titled “Related types”Examples
Section titled “Examples”intervalFromDurationDate("2024-01-01", "P1M", "start") // { start: "2024-01-01", end: "2024-02-01" }intervalFromDurationDate("2024-02-01", "P1M", "end") // { start: "2024-01-01", end: "2024-02-01" }intervalFromDurationDate("2024-01-31", "P1M", "start", { overflow: "reject" }) // nullintervalFromDurationDate("2024-01-05", "-P10D", "start") // null (inverted span)intervalFromDurationDate("invalid", "P1M", "start") // nullintervalFromDurationDate("5784-06-15[u-ca=hebrew]", "P1M", "start") // { start: "5784-06-15[u-ca=hebrew]", end: "5784-07-15[u-ca=hebrew]" } (Adar I -> Adar)