Dates
addDays
Section titled “addDays”Adds calendar days using UTC math. Datetime inputs preserve datetime output; date-only inputs return date-only output.
export function addDays(date: string, days: number): ISODateString;subtractDays
Section titled “subtractDays”export function subtractDays(date: string, days: number): ISODateString;addHours
Section titled “addHours”export function addHours(date: string, hours: number): ISODateTimeString;addMinutes
Section titled “addMinutes”export function addMinutes(date: string, minutes: number): ISODateTimeString;addMonths
Section titled “addMonths”export function addMonths(date: string, months: number): ISODateString;diffInDays
Section titled “diffInDays”export function diffInDays(startDate: string, endDate: string): number;diffInCalendarDays
Section titled “diffInCalendarDays”export function diffInCalendarDays(startDate: string, endDate: string): number;diffInTaskDuration
Section titled “diffInTaskDuration”Returns the Gantt duration between two task dates. Date-only ranges are inclusive; datetime ranges use elapsed days and keep a non-zero positive duration at one minute minimum.
export function diffInTaskDuration(startDate: string, endDate: string): number;diffInHours
Section titled “diffInHours”export function diffInHours(startDate: string, endDate: string): number;diffInMinutes
Section titled “diffInMinutes”export function diffInMinutes(startDate: string, endDate: string): number;compareIsoDates
Section titled “compareIsoDates”export function compareIsoDates(left: string, right: string): number;isBefore
Section titled “isBefore”export function isBefore(left: string, right: string): boolean;isAfter
Section titled “isAfter”export function isAfter(left: string, right: string): boolean;minDate
Section titled “minDate”export function minDate(left: string, right: string): ISODateString;maxDate
Section titled “maxDate”export function maxDate(left: string, right: string): ISODateString;shiftDate
Section titled “shiftDate”export function shiftDate(date: string, deltaDays: number): ISODateString;shiftDateRange
Section titled “shiftDateRange”export function shiftDateRange<T extends ISODateRange>(range: T, deltaDays: number): T;shiftDateRanges
Section titled “shiftDateRanges”export function shiftDateRanges<T extends ISODateRange>( ranges: readonly T[] | undefined, deltaDays: number,): readonly T[] | undefined;startOfWeek
Section titled “startOfWeek”export function startOfWeek(date: string): ISODateString;startOfMonth
Section titled “startOfMonth”export function startOfMonth(date: string): ISODateString;startOfQuarter
Section titled “startOfQuarter”export function startOfQuarter(date: string): ISODateString;startOfYear
Section titled “startOfYear”export function startOfYear(date: string): ISODateString;getWeekStartIsoDate
Section titled “getWeekStartIsoDate”Returns the UTC Monday for the week containing date.
export function getWeekStartIsoDate(date: Date): ISODateString;getMonthStartIsoDate
Section titled “getMonthStartIsoDate”export function getMonthStartIsoDate(date: Date): ISODateString;getIsoWeekNumber
Section titled “getIsoWeekNumber”export function getIsoWeekNumber(date: Date): number;todayIsoDate
Section titled “todayIsoDate”export function todayIsoDate(): ISODateString;createDateList
Section titled “createDateList”Returns an inclusive date list and throws when the range is invalid.
export function createDateList( startDate: string, endDate: string, options:;createSafeDateList
Section titled “createSafeDateList”Returns an inclusive date list or [] for invalid input.
Use this when remote/user data should not throw during projection.
export function createSafeDateList(startDate: string, endDate: string): readonly ISODateString[];rangesOverlap
Section titled “rangesOverlap”Tests overlap for half-open numeric ranges: [start, end) and [rangeStart, rangeEnd).
export function rangesOverlap(start: number, end: number, rangeStart: number, rangeEnd: number): boolean;startOfUtcDayMs
Section titled “startOfUtcDayMs”Returns the UTC midnight timestamp for the date containing value.
export function startOfUtcDayMs(value: string | number | Date): number;getDateDayBounds
Section titled “getDateDayBounds”Returns the half-open UTC day bounds [startMs, endMs) for a date.
export function getDateDayBounds(date: string):;getDateRangeBounds
Section titled “getDateRangeBounds”Returns half-open UTC bounds for an inclusive date range.
export function getDateRangeBounds(range: ISODateBoundsRange):;MINUTE_IN_MS
Section titled “MINUTE_IN_MS”MINUTE_IN_MS: number;HOUR_IN_MS
Section titled “HOUR_IN_MS”HOUR_IN_MS: number;DAY_IN_MS
Section titled “DAY_IN_MS”DAY_IN_MS: number;WEEK_IN_MS
Section titled “WEEK_IN_MS”WEEK_IN_MS: number;MINUTE_IN_DAYS
Section titled “MINUTE_IN_DAYS”MINUTE_IN_DAYS: number;ISODateRange
Section titled “ISODateRange”interface ISODateRange { readonly startDate: ISODateString; readonly endDate: ISODateString}ISODateBoundsRange
Section titled “ISODateBoundsRange”interface ISODateBoundsRange { readonly start: string; readonly end: string}resolveDurationSettings
Section titled “resolveDurationSettings”export function resolveDurationSettings( settings: DurationSettings | undefined, calendar?: Pick<CalendarEntity, 'hoursPerDay' | 'workingDays'> | null,): ResolvedDurationSettings;parseDuration
Section titled “parseDuration”export function parseDuration( input: unknown, options?: ParseDurationOptions,): ParsedDuration | null;hasDurationUnitToken
Section titled “hasDurationUnitToken”Returns true when text explicitly contains a unit rather than a bare number.
export function hasDurationUnitToken(input: unknown): boolean;durationToWorkingDays
Section titled “durationToWorkingDays”export function durationToWorkingDays( value: number, unit: DurationUnit, settings: ResolvedDurationSettings,): number;durationToHours
Section titled “durationToHours”Converts a displayed duration magnitude into canonical stored working hours.
export function durationToHours( value: number, unit: DurationUnit, settings: ResolvedDurationSettings,): number;workingDaysToDuration
Section titled “workingDaysToDuration”export function workingDaysToDuration( workingDays: number, unit: DurationUnit, settings: ResolvedDurationSettings,): number;hoursToDuration
Section titled “hoursToDuration”Converts canonical stored working hours into a display magnitude.
export function hoursToDuration( hours: number, unit: DurationUnit, settings: ResolvedDurationSettings,): number;durationToElapsedDays
Section titled “durationToElapsedDays”Converts an elapsed duration to continuous 24-hour calendar days.
export function durationToElapsedDays(value: number, unit: DurationUnit): number;durationToElapsedHours
Section titled “durationToElapsedHours”Converts an elapsed display magnitude into canonical stored continuous hours.
export function durationToElapsedHours(value: number, unit: DurationUnit): number;elapsedDaysToDuration
Section titled “elapsedDaysToDuration”export function elapsedDaysToDuration(elapsedDays: number, unit: DurationUnit): number;elapsedHoursToDuration
Section titled “elapsedHoursToDuration”Converts canonical stored continuous hours into an elapsed display magnitude.
export function elapsedHoursToDuration(elapsedHours: number, unit: DurationUnit): number;resolveAutomaticDurationUnit
Section titled “resolveAutomaticDurationUnit”export function resolveAutomaticDurationUnit( workingDays: number, settings: ResolvedDurationSettings,): DurationUnit;resolveAutomaticDurationUnitFromHours
Section titled “resolveAutomaticDurationUnitFromHours”Selects the automatic display unit for a canonical working-hour value.
export function resolveAutomaticDurationUnitFromHours( hours: number, settings: ResolvedDurationSettings,): DurationUnit;formatDurationValue
Section titled “formatDurationValue”export function formatDurationValue( value: number, unit: DurationUnit, options?: FormatDurationValueOptions,): string;formatWorkingDuration
Section titled “formatWorkingDuration”export function formatWorkingDuration( workingDays: number, settings: ResolvedDurationSettings, options?: FormatWorkingDurationOptions,): string;DurationUnit
Section titled “DurationUnit”Unit retained with an authored task duration.
/** Unit retained with an authored task duration. */export type DurationUnit = 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';DurationSettings
Section titled “DurationSettings”Project-level duration display and working-time conversion settings.
interface DurationSettings { /** Unit used for bare input and display. `auto` chooses minutes, hours, or days by magnitude. */ readonly defaultUnit?: DurationUnit | 'auto'; /** Unit used for bare Work input and display. Defaults to `auto`, independently from task Duration. */ readonly defaultWorkUnit?: DurationUnit | 'auto'; /** Working hours represented by one duration day. Defaults to the effective calendar, then 8. */ readonly hoursPerDay?: number; /** Working hours represented by one duration week. Defaults to the effective workweek, then 40. */ readonly hoursPerWeek?: number; /** Working days represented by one duration month. Defaults to 20. */ readonly daysPerMonth?: number; /** Maximum digits shown after the decimal separator. Defaults to 1. */ readonly maximumFractionDigits?: number}ResolvedDurationSettings
Section titled “ResolvedDurationSettings”interface ResolvedDurationSettings { readonly defaultUnit: DurationUnit | 'auto'; readonly defaultWorkUnit: DurationUnit | 'auto'; readonly hoursPerDay: number; readonly hoursPerWeek: number; readonly daysPerMonth: number; readonly maximumFractionDigits: number}ParsedDuration
Section titled “ParsedDuration”interface ParsedDuration { readonly value: number; readonly unit: DurationUnit; readonly elapsed: boolean}ParseDurationOptions
Section titled “ParseDurationOptions”interface ParseDurationOptions { readonly defaultUnit?: DurationUnit; readonly allowElapsed?: boolean}FormatDurationValueOptions
Section titled “FormatDurationValueOptions”interface FormatDurationValueOptions { readonly elapsed?: boolean; /** Maximum digits shown after the decimal separator. Defaults to 1. */ readonly maximumFractionDigits?: number}FormatWorkingDurationOptions (Extended from duration.ts)
Section titled “FormatWorkingDurationOptions (Extended from duration.ts)”interface FormatWorkingDurationOptions { readonly unit?: DurationUnit}parseIsoDate
Section titled “parseIsoDate”Parses date-only strings at UTC midnight instead of local midnight.
Datetime strings are delegated to the JavaScript Date parser.
export function parseIsoDate(date: string): Date;parseIsoDateOnly
Section titled “parseIsoDateOnly”Parses the YYYY-MM-DD prefix of a date or datetime at UTC midnight.
export function parseIsoDateOnly(value: string): Date;isIsoDateTimeInput
Section titled “isIsoDateTimeInput”export function isIsoDateTimeInput(value: string): boolean;getIsoWeekdayUtc
Section titled “getIsoWeekdayUtc”export function getIsoWeekdayUtc(date: Date): number;getUtcWeekday
Section titled “getUtcWeekday”export function getUtcWeekday(value: string | Date): number;getIsoWeekday
Section titled “getIsoWeekday”export function getIsoWeekday(value: string | Date): number;isValidIsoWeekday
Section titled “isValidIsoWeekday”export function isValidIsoWeekday(value: number): boolean;formatIsoDate
Section titled “formatIsoDate”export function formatIsoDate(date: Date): ISODateString;formatLocalIsoDate
Section titled “formatLocalIsoDate”Serializes the local calendar fields of a valid Date as YYYY-MM-DD.
export function formatLocalIsoDate(value: Date): ISODateString;toLocalIsoDate
Section titled “toLocalIsoDate”Returns local calendar fields as YYYY-MM-DD, or null for a missing/invalid date.
export function toLocalIsoDate(value: Date | undefined): ISODateString | null;formatIsoDateTime
Section titled “formatIsoDateTime”export function formatIsoDateTime(date: Date): ISODateTimeString;isValidIsoDate
Section titled “isValidIsoDate”export function isValidIsoDate(value: string | undefined): value is ISODateString;isValidIsoDateTime
Section titled “isValidIsoDateTime”export function isValidIsoDateTime(value: string | undefined): value is ISODateTimeString;isValidIsoDateValue
Section titled “isValidIsoDateValue”Validates either a date-only ISO value or a UTC datetime value.
Date-only values must round-trip as YYYY-MM-DD; datetimes must round-trip
exactly through toISOString().
export function isValidIsoDateValue(value: string | undefined): value is ISODateString;normalizeIsoDate
Section titled “normalizeIsoDate”Returns a valid YYYY-MM-DD value or throws with a user-facing message.
export function normalizeIsoDate(value: string): ISODateString;parseDateTime
Section titled “parseDateTime”Parses scheduler datetime input as UTC.
Values without a trailing Z are treated as UTC, not local time.
export function parseDateTime(value: string): Date;toISODate
Section titled “toISODate”export function toISODate(date: Date): ISODateString;toIsoDate
Section titled “toIsoDate”export function toIsoDate(date: Date): ISODateString;ISODateString
Section titled “ISODateString”export type ISODateString = `${number}-${number}-${number}` | `${number}-${number}-${number}T${string}`;ISODateTimeString
Section titled “ISODateTimeString”export type ISODateTimeString = `${number}-${number}-${number}T${string}`;ISO_DATE_ONLY_PATTERN
Section titled “ISO_DATE_ONLY_PATTERN”ISO_DATE_ONLY_PATTERN: RegExp;ISO_DATE_PATTERN
Section titled “ISO_DATE_PATTERN”ISO_DATE_PATTERN: RegExp;ISO_DATE_PREFIX_PATTERN
Section titled “ISO_DATE_PREFIX_PATTERN”ISO_DATE_PREFIX_PATTERN: RegExp;ISO_DATETIME_PATTERN
Section titled “ISO_DATETIME_PATTERN”ISO_DATETIME_PATTERN: RegExp;ISO_DATETIME_INPUT_PATTERN
Section titled “ISO_DATETIME_INPUT_PATTERN”ISO_DATETIME_INPUT_PATTERN: RegExp;ISO_LOCAL_DATETIME_INPUT_PATTERN
Section titled “ISO_LOCAL_DATETIME_INPUT_PATTERN”ISO_LOCAL_DATETIME_INPUT_PATTERN: RegExp;ISO_UTC_DATETIME_WITHOUT_ZONE_PATTERN
Section titled “ISO_UTC_DATETIME_WITHOUT_ZONE_PATTERN”ISO_UTC_DATETIME_WITHOUT_ZONE_PATTERN: RegExp;parseTimeOfDay
Section titled “parseTimeOfDay”Parses HH:mm or h:mm AM/PM into minutes from midnight.
24:00 is accepted only when allowEndOfDay is enabled.
export function parseTimeOfDay(value: string, options:;formatTimeOfDay
Section titled “formatTimeOfDay”export function formatTimeOfDay(totalMinutes: number): string;formatCompactTimeOfDay
Section titled “formatCompactTimeOfDay”export function formatCompactTimeOfDay(totalMinutes: number): string;formatAmPmTimeOfDay
Section titled “formatAmPmTimeOfDay”export function formatAmPmTimeOfDay(totalMinutes: number): string;formatDisplayTimeOfDay
Section titled “formatDisplayTimeOfDay”export function formatDisplayTimeOfDay( totalMinutes: number, options:;formatDurationMinutes
Section titled “formatDurationMinutes”export function formatDurationMinutes(totalMinutes: number): string;formatDuration
Section titled “formatDuration”export function formatDuration( duration: number | undefined | null, options:;hasAmPmMarker
Section titled “hasAmPmMarker”export function hasAmPmMarker(value: string): boolean;getDateMinutes
Section titled “getDateMinutes”export function getDateMinutes(date: Date): number;createDateTime
Section titled “createDateTime”Creates a UTC datetime from a date-only value and minutes since midnight.
export function createDateTime(date: string, minutes: number): ISODateTimeString;createDateTimeFromTimeOfDay
Section titled “createDateTimeFromTimeOfDay”export function createDateTimeFromTimeOfDay(date: string, time: string, dayOffset = 0): ISODateTimeString;getLocalDateTimeAsUtcIsoDateTime
Section titled “getLocalDateTimeAsUtcIsoDateTime”Serializes a local Date clock value as a UTC ISO datetime.
This preserves the user’s local wall-clock fields for scheduler form inputs.
export function getLocalDateTimeAsUtcIsoDateTime(date: Date): ISODateTimeString;shiftDateTime
Section titled “shiftDateTime”export function shiftDateTime(value: string, deltaMinutes: number): ISODateTimeString;getDateTimeDurationMinutes
Section titled “getDateTimeDurationMinutes”export function getDateTimeDurationMinutes(startDateTime: string, endDateTime: string): number;getDurationMinutes
Section titled “getDurationMinutes”export function getDurationMinutes(event:;getClampedDateTimeDurationMinutes
Section titled “getClampedDateTimeDurationMinutes”Returns an event duration in minutes, clamped to zero for inverted ranges.
export function getClampedDateTimeDurationMinutes(startDateTime: string, endDateTime: string): number;snapMinutes
Section titled “snapMinutes”export function snapMinutes(minutes: number, snap: number): number;snapDateTime
Section titled “snapDateTime”Snaps a UTC datetime to the nearest minute interval within the same UTC day.
export function snapDateTime(value: string, snap: number): ISODateTimeString;normalizeTimelineWeekStartsOn
Section titled “normalizeTimelineWeekStartsOn”export function normalizeTimelineWeekStartsOn(value: unknown): TimelineWeekStartsOn;startOfTimelineWeek
Section titled “startOfTimelineWeek”export function startOfTimelineWeek(date: string, weekStartsOn: TimelineWeekStartsOn): ISODateString;parseTimelineDateValue
Section titled “parseTimelineDateValue”Parses a timeline boundary as UTC for deterministic scale math.
export function parseTimelineDateValue(date: string): Date;startOfTimelineUnit
Section titled “startOfTimelineUnit”Returns the UTC-aligned start for a timeline unit. Intraday units preserve datetime precision; day and larger units return date-only values.
export function startOfTimelineUnit( unit: TimelineUnit, date: string, weekStartsOn: TimelineWeekStartsOn = 0,): ISODateString | ISODateTimeString;addTimelineUnit
Section titled “addTimelineUnit”Adds a timeline unit while preserving the timeline’s UTC normalization rules.
export function addTimelineUnit( unit: TimelineUnit, date: string, amount: number,): ISODateString | ISODateTimeString;getTimelineEndExclusiveDate
Section titled “getTimelineEndExclusiveDate”Converts an inclusive Gantt date boundary to an exclusive timeline boundary. Datetime values already represent instants and are returned unchanged.
export function getTimelineEndExclusiveDate(date: string): ISODateString | ISODateTimeString;getTimelineQuarter
Section titled “getTimelineQuarter”export function getTimelineQuarter(date: string): number;formatTimelineDateLabel
Section titled “formatTimelineDateLabel”Formats timeline labels in UTC so headers do not drift by local timezone.
export function formatTimelineDateLabel( date: string, locale: string, options: Intl.DateTimeFormatOptions,): string;startOfHour
Section titled “startOfHour”export function startOfHour(date: string): ISODateTimeString;startOfMinute
Section titled “startOfMinute”export function startOfMinute(date: string): ISODateTimeString;TimelineUnit
Section titled “TimelineUnit”export type TimelineUnit = 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year';TimelineWeekStartsOn
Section titled “TimelineWeekStartsOn”export type TimelineWeekStartsOn = 0 | 1;isWorkingDate
Section titled “isWorkingDate”Checks a date against calendar working weekdays and holiday exclusions.
export function isWorkingDate( date: ISODateString, calendar: WorkingCalendar | null | undefined,): boolean;moveToNextWorkingDate
Section titled “moveToNextWorkingDate”Moves forward until a working date is found.
Returns the original date when no working date is found before iterationLimit.
export function moveToNextWorkingDate( date: ISODateString, calendar: WorkingCalendar | null | undefined, iterationLimit = 3660,): ISODateString;moveToNextWorkingDateTime
Section titled “moveToNextWorkingDateTime”export function moveToNextWorkingDateTime( date: ISODateString, calendar: WorkingCalendar | null | undefined, iterationLimit = 3660,): ISODateString;moveToPreviousWorkingDate
Section titled “moveToPreviousWorkingDate”Moves backward until a working date is found.
Returns the original date when no working date is found before iterationLimit.
export function moveToPreviousWorkingDate( date: ISODateString, calendar: WorkingCalendar | null | undefined, iterationLimit = 3660,): ISODateString;addWorkingDays
Section titled “addWorkingDays”Adds working days, excluding the start date from the counted offset.
export function addWorkingDays( startDate: ISODateString, days: number, calendar: WorkingCalendar | null | undefined,): ISODateString;subtractWorkingDays
Section titled “subtractWorkingDays”Subtracts working days, excluding the start date from the counted offset.
export function subtractWorkingDays( startDate: ISODateString, days: number, calendar: WorkingCalendar | null | undefined,): ISODateString;offsetByLagCalendar
Section titled “offsetByLagCalendar”Applies dependency lag using either calendar days or working days.
export function offsetByLagCalendar( date: ISODateString, days: number, calendar: WorkingCalendar | null | undefined, options: LagCalendarOptions,): ISODateString;resolveTaskEndDate
Section titled “resolveTaskEndDate”Resolves a task end date from start and duration. Date-only durations are inclusive; datetime durations support fractional days.
export function resolveTaskEndDate( startDate: ISODateString, duration: number, calendar: WorkingCalendar | null | undefined, options: WorkingDayOptions,): ISODateString;resolveTaskStartDateFromEnd
Section titled “resolveTaskStartDateFromEnd”Resolves a task start date from end and duration. Date-only durations are inclusive; datetime durations support fractional days.
export function resolveTaskStartDateFromEnd( endDate: ISODateString, duration: number, calendar: WorkingCalendar | null | undefined, options: WorkingDayOptions,): ISODateString;countWorkingDaysInclusive
Section titled “countWorkingDaysInclusive”Counts working dates inclusively between start and end.
export function countWorkingDaysInclusive( startDate: ISODateString, endDate: ISODateString, calendar: WorkingCalendar | null | undefined,): number;countWorkingDuration
Section titled “countWorkingDuration”export function countWorkingDuration( startDate: ISODateString, endDate: ISODateString, calendar: WorkingCalendar | null | undefined,): number;snapToWorkingDate
Section titled “snapToWorkingDate”Snaps a date to the nearest working date in the requested direction.
Returns the original date when no working date is found before iterationLimit.
export function snapToWorkingDate( date: ISODateString, calendar: WorkingCalendar | null | undefined, direction: 'forward' | 'back' = 'forward', iterationLimit = 366,): ISODateString;WorkingTimeRange
Section titled “WorkingTimeRange”interface WorkingTimeRange { readonly start: string; readonly end: string}WorkingCalendar
Section titled “WorkingCalendar”interface WorkingCalendar { readonly workingDays: readonly number[]; readonly holidays: readonly string[]; readonly workingHours?: WorkingTimeRange | readonly WorkingTimeRange[]; readonly hoursPerDay?: number}WorkingDayOptions
Section titled “WorkingDayOptions”interface WorkingDayOptions { readonly excludeHolidaysFromDuration: boolean}LagCalendarOptions
Section titled “LagCalendarOptions”interface LagCalendarOptions { readonly lagCalendar: 'calendar-days' | 'working-days'}