nom-date

A library of types related to Javascript Date

Usage no npm install needed!

<script type="module">
  import nomDate from 'https://cdn.skypack.dev/nom-date';
</script>

README

cute animal nomming on carrot

Nominal Date Types

A library of TypeScript types related to Javascript Date.

The types add type safety to various strings and numbers used to serialize or calculate with Date values. This provides support for conversion and validation, but only minimal support for calculation.

This library has no runtime dependencies.

DateLike

This is a union type of built-in representations of a moment in time. It includes Date, number of milliseconds since UNIX epoch, and string ISO timestamps.

toDateUTC(x: DateLike): Date

Returns or constructs a Date object from DateLike.

Timestamp

This is a type for strings obtained from Date.toISOString().

isTimestamp(x: any): x is Timestamp

Type-guard for x being a valid string representing a Timestamp.

nowTimestamp(): Timestamp

Returns a Timestamp representing the current moment in time.

timestampOrNull(x: string): Timestamp | null

Returns x if it represents a valid Timestamp string, null otherwise.

timestampOrThrow(x: string): Timestamp

Returns x if it represents a valid Timestamp string, and throws otherwise.

toTimestamp(x: DateLike): Timestamp

Converts a valid DateLike to Timestamp.

DurationMs

DurationMs is a type for numbers that represents duration as a number of milliseconds.

isDurationMs(x: any): x is DurationMs

Type-guard for x being a valid number that represents a DurationMs. Succeeds for any number.

durationMs(spec: DurationSpec): DurationMs

Returns a DurationMs given a DurationSpec:

export interface DurationSpec {
  days?: number;
  hours?: number;
  minutes?: number;
  seconds?: number;
  ms?: number;
}

Negative values are supported.

EpochMs

EpochMs is a type for numbers that represents a number of milliseconds since the UNIX epoch (midnight, Jan 1, 1970, UTC). This has the same semantics as Date.now().

isEpochMs(x: any): x is EpochMs

Type-guard for x being a valid number that represents an EpochMs. Succeeds for any number.

nowEpochMs(): EpochMs

Returns an EpochMs representing the current moment in time.

toEpochMs(x: DateLike): EpochMs

Converts a valid DateLike to EpochMs.

DurationCalc

A namespace of functions for calculating with DurationMs and EpochMs.

offset(base: EpochMs, duration: DurationMs): EpochMs

Returns base + duration, works for negative values.

between(start: EpochMs, end: EpochMs): DurationMs

Returns end - start, works for negative values. Note the order is opposite subtraction--if the earlier EpochMs comes first the result is positive.

sum(...durations: DurationMs[]): DurationMs

Returns the sum of zero or more DurationMs.

negate(duration: DurationMs): DurationMs

Negates a DurationMs.

max<T extends DurationMs | EpochMs>(...xs: T[]): T

Returns the maximum of DurationMss or EpochMss. Note, arguments must all be of the same type.

min<T extends DurationMs | EpochMs>(...xs: T[]): T

Returns the minimum of DurationMss or EpochMss. Note, arguments must all be of the same type.

CalendarDay

CalendarDay is a type for strings that represents a particular calendar day in the form "YYYY-MM-DD". It is a goal that this type be sortable, so values are restricted to positive years with 4 digits.

MIN_DATE: Timestamp

A Timestamp representing the earliest valid CalendarDay.

MAX_DATE: Timestamp

A Timestamp representing the latest valid CalendarDay.

MIN_EPOCH_MS: EpochMs

An EpochMs representing the earliest valid CalendarDay.

MAX_EPOCH_MS: EpochMs

An EpochMs representing the latest valid CalendarDay.

clampEpochMs(ms: number): EpochMs

For use in date calculations via EpochMs and DurationMs. Returns an EpochMs between MIN_EPOCH_MS and MAX_EPOCH_MS inclusive that represents the closest EpochMs that falls in the range of valid CalendarDays.

isDay(x: any): x is CalendarDay

Type-guard for x being a valid string that represents a CalendarDay.

dayOrNull(x: string): CalendarDay | null

Returns x if it represents a valid CalendarDay string, null otherwise.

dayOrThrow(x: string): CalendarDay

Returns x if it represents a valid CalendarDay string, and throws otherwise.

toUtcDay(x: DateLike): CalendarDay

Converts a valid DateLike to CalendarDay.

CalendarMonth and CalendarYear

Experimental. These have the same semantics as CalendarDay except for month and year respectively, and support the same set of functions.