import { RecursiveRecord, RecursiveType } from '../models/typescript.model.js';

/**
 * Compute elapsed time between two dates
 * @param endDate
 * @param startDate
 */
declare const elapsedTime: (endDate: Date, startDate?: Date) => number;
declare class DateUtils {
    static clone: (date: Date) => Date;
    static next(days?: number, date?: Date, coefficient?: number): Date;
    static previous(days?: number, date?: Date, coefficient?: number): Date;
    static weeks: {
        previous: (weeks?: number, date?: Date) => Date;
        next: (weeks?: number, date?: Date) => Date;
    };
}
declare const toDateObject: <T extends RecursiveRecord<string>>(record?: T) => RecursiveType<T, Date> | undefined;
declare const compareDateObject: <T extends RecursiveRecord<Date>>(a?: T, b?: T) => RecursiveType<T, boolean>;
declare const shortTime: (date?: Date, locale?: Intl.LocalesArgument, options?: Intl.DateTimeFormatOptions) => string;
declare const DayOfWeek: {
    readonly Sunday: "Sunday";
    readonly Monday: "Monday";
    readonly Tuesday: "Tuesday";
    readonly Wednesday: "Wednesday";
    readonly Thursday: "Thursday";
    readonly Friday: "Friday";
    readonly Saturday: "Saturday";
};
declare const DayOfWeekToNumber: {
    readonly Sunday: 0;
    readonly Monday: 1;
    readonly Tuesday: 2;
    readonly Wednesday: 3;
    readonly Thursday: 4;
    readonly Friday: 5;
    readonly Saturday: 6;
};
declare const NumberToDayOfWeek: {
    readonly 0: "Sunday";
    readonly 1: "Monday";
    readonly 2: "Tuesday";
    readonly 3: "Wednesday";
    readonly 4: "Thursday";
    readonly 5: "Friday";
    readonly 6: "Saturday";
};
declare const dayOfTheWeek: (date: Date | string | number) => any;
declare const getTodayISOLocal: () => string;
type TimeSinceUnit = 'years' | 'months' | 'days' | 'hours' | 'minutes' | 'seconds';
type TimeSinceResult = Record<TimeSinceUnit, number>;
declare function timeSince(date: Date | number | string): TimeSinceResult;
/**
 * Format a date to a human-readable string indicating how long ago it was
 * @param date - The date to format, can be a Date object, timestamp, or ISO string
 * @param short - If true, returns a shorter format (e.g., "2h" instead of "2 hours")
 * @param units - Supported units for time difference, in order of preference
 */
declare function timeAgo(date: Date | number | string, { short, units, }?: {
    short?: boolean;
    units?: TimeSinceUnit[];
}): string;

export { DateUtils, DayOfWeek, DayOfWeekToNumber, NumberToDayOfWeek, type TimeSinceResult, type TimeSinceUnit, compareDateObject, dayOfTheWeek, elapsedTime, getTodayISOLocal, shortTime, timeAgo, timeSince, toDateObject };
