Skip to content

isValidCalendarDate

isValidCalendarDate(value: string): boolean

Return true if value is a valid GMT PlainDate string: a bare ISO date (“2024-10-03”) or an RFC 9557 calendar-annotated date (“2024-10-03[u-ca=hebrew]”), as Temporal.PlainDate#toString() and convertDateToCalendar write it.

  • The digits are the ISO date whatever the calendar, so the ISO date must be valid and within Temporal’s range (-271821-04-19 to +275760-09-13). The year is four digits or a sign and six.
  • A [u-ca=<id>] annotation, optionally critical ([!u-ca=hebrew]). Temporal’s CanonicalizeCalendar validates the id, folding case and aliases ([u-ca=HEBREW], [u-ca=ethiopic-amete-alem]), and the calendar must be one GMT supports (CalendarSystem); chinese, dangi, islamic and islamic-rgsa return false.
  • The annotations follow Temporal’s ISO grammar, as Temporal.PlainDate.from reads them: a time zone annotation and elective unknown annotations ([foo=bar]) are ignored and the first u-ca annotation names the calendar; an unknown critical annotation ([!foo=bar]) or a second u-ca annotation when either is critical returns false.
  • A date-time is valid and names its date, as Temporal.PlainDate.from reads it ("2024-10-03T14:30[u-ca=hebrew]" is 2024-10-03 in Hebrew): the time is dropped.
  • The part before the first [ must match GMT’s strict extended shape, as isValidDate and isValidDateTime require: basic format (20241003), a space or lower-case t separator, a UTC offset or designator and a leap second (second 60) return false, although Temporal.PlainDate.from reads all but the designator.
  • Returns false for non-strings or empty strings. Compatibility: since 1.16.0 the string is RFC 9557, and a date-time is read as its date (earlier releases returned false). Earlier releases accepted calendar-native digits, ;era= and the ids gregorian, taiwan, islamic-tabular and ethiopic-amete-alem; a ;era= string or a six-digit unsigned year now returns false, and any other such string is read as the ISO date its digits spell.
ParameterTypeDescription
valuestringISO PlainDate string, optionally calendar-annotated

boolean indicating validity

import { isValidCalendarDate } from "@northguild/gmt/plain/validate";
isValidCalendarDate("2024-10-03") // true
output 

plain/validate/isValidCalendarDate.ts