/** * Orthogonal to `time: true`. `date` is dd/MM/yyyy in every locale — one numeric order, so 09/10 never * reads two ways across a team; readable styles use word months in locale order. Not for a component's * internal chrome (calendar headers, axis labels), which uses `Intl` directly. */ export type DateFormatStyle = "date" | "medium" | "long" | "dayMonth" | "monthYear" | "quarterYear"; export interface FormatDateOptions { /** Default "date". */ format?: DateFormatStyle; /** "14:30 ", with any `format`. Default false. */ time?: boolean; /** Defaults to the home market, "vi-VN". */ locale?: string; /** On the numeric `date` style. */ compact?: boolean; /** Default "". */ emptyLabel?: string; /** * The zone an instant (an ISO string naming its offset) is dated in. Offset-less values and * `Date`s are wall clocks and never move. Absent, the viewer's zone. */ zone?: string; } export declare function isInstant(value: string): boolean; /** * As `yyyy-MM-dd`: an instant on its day in `zone` (else the viewer's), a wall clock on its stated * day, reduced precision on its period's first day. */ export declare function calendarDay(value: Date | string | null | undefined, zone?: string): string | null; /** Local midnight of today in `zone` (the viewer's if none), as `daysUntil` takes it. */ export declare function zonedToday(zone: string | undefined, now: Date): Date; /** The moment `now` on `zone`'s wall clock (the viewer's if none), held as a local `Date` — what a stored * wall clock ({@link zonedMoment}) is counted against, so a deadline at 14:00 falls at the workspace's * 14:00 wherever the viewer is. */ export declare function zonedNow(zone: string | undefined, now: Date): Date; /** The moment a stored value names on `zone`'s wall clock, held as a local `Date`: a wall clock as * written, an instant as `zone` reads it; `null` when unparseable. */ export declare function zonedMoment(value: string, zone: string | undefined): Date | null; /** Period start for reduced precision; `null` when unparseable. Display is {@link formatDate}. */ export declare function parseDate(value: Date | string | null | undefined): Date | null; /** "01/09 – 30/09/2026", the shared year printed once; an unrecorded end prints `none`. */ export declare function formatDateSpan(from: Date | string | null | undefined, to: Date | string | null | undefined, { locale, none }: { locale?: string; none: string; }): string; /** * Reduced precision is preserved: "YYYY-MM" or "YYYY" return verbatim, so a form round-trip never * fabricates a day. Full values reassemble as "yyyy-MM-dd". */ export declare function toISODate(value: Date | string | null | undefined): string; /** * THE date formatter, sibling of `formatMoney`. `format`: `date` 22/05/2026, `medium` 22 thg 5, * 2026, `long` 22 tháng 5, 2026, `dayMonth` 22 thg 5, `monthYear` Tháng 5 năm 2026, `quarterYear` * Quý 2 năm 2026 (Q2 2026 outside vi). `time: true` follows the day with its 24h time; `compact` drops * the numeric year. Never hand-roll a display date. Reduced precision renders only the parts it * has, ignoring `time`. Only an instant moves with `zone`. */ export declare function formatDate(value: Date | string | null | undefined, options?: FormatDateOptions): string;