API reference › @evolu/common › Type › PlainDateIso
type PlainDateIso = string & Brand<"PlainDateIso">;
Defined in: packages/common/src/Type.ts:6139
Calendar date String in the ISO 8601 YYYY-MM-DD format.
It is an RFC 3339 full-date in the proleptic Gregorian calendar, with years
from 0000 through 9999 like DateIso. The date must exist, so
2023-02-29 and 2023-04-31 are rejected, while the leap day 2024-02-29
is accepted. Extended years, missing leading zeros, and times are rejected.
A plain date has no time zone, so it names a calendar day, such as a birthday or a due date, rather than a moment. Converting a DateIso to a plain date requires choosing a time zone, which is an application decision. The fixed-width form sorts chronologically as text.
Example
import { assertEqual, assertErr, assertOk, PlainDateIso } from "@evolu/common";
assertOk(PlainDateIso.fromUnknown("2024-02-29"), "2024-02-29");
const invalid = PlainDateIso.fromUnknown("2023-02-29");
assertErr(invalid, { type: "PlainDateIso", value: "2023-02-29" });
assertEqual(
PlainDateIso.formatError(invalid.error),
'The value "2023-02-29" is not a valid calendar date in the YYYY-MM-DD format.',
);