Skip to content

Instantly share code, notes, and snippets.

@sebastiankade
Created October 17, 2024 07:47
Show Gist options
  • Save sebastiankade/2f4e0aee9a0fa454ad3eaa434e9d4748 to your computer and use it in GitHub Desktop.
Save sebastiankade/2f4e0aee9a0fa454ad3eaa434e9d4748 to your computer and use it in GitHub Desktop.
ISO-Date Proposal
export type TZDate = `${number}-${number}-${number}Z`;
export type TZDateTime =
| `${number}-${number}-${number}T${number}:${number}:${number}Z`
| `${number}-${number}-${number}T${number}:${number}:${number}.${number}Z`;
export type CalDate = `${number}-${number}-${number}`;
export type CalDateTime =
| `${number}-${number}-${number}T${number}:${number}:${number}`
| `${number}-${number}-${number}T${number}:${number}:${number}.${number}`;
export type ISODate = TZDate | TZDateTime | CalDate | CalDateTime;
export type JSDate = Date;
export function isISODate(d: ISODate): d is ISODate;
export function isCalDate(d: ISODate): d is CalDate;
export function isTZDate(d: ISODate): d is TZDate;
export function toISODate(date: Date, mode: DateMode): ISODate;
export function isJSDate(d: ISODate | JSDate): d is JSDate;
export function toJSDate(d: ISODate, mode: DateMode): JSDate;
export type DateMode = "calendar" | "utc" | "local";
export function useDate(
d: ISODate,
mode: DateMode,
fn: Fn<JSDate, string>
): string;
export function useDate(
d: ISODate,
mode: DateMode,
fn: Fn<JSDate, JSDate>
): ISODate;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment