import type { ICompare, ICopy, IEqualsDelta, IEquiv } from "@thi.ng/api";
import { type MaybeDate, type Period, type Precision } from "./api.js";
export declare const dateTime: (epoch?: MaybeDate, prec?: Precision) => DateTime;
/**
 * Epoch abstraction with adjustable coarseness/precision. All date fields in
 * UTC only.
 */
export declare class DateTime implements ICopy<DateTime>, ICompare<MaybeDate>, IEquiv, IEqualsDelta<MaybeDate> {
    t: number;
    s: number;
    m: number;
    h: number;
    d: number;
    M: number;
    y: number;
    constructor(epoch?: MaybeDate, prec?: Precision);
    /**
     * Readonly property, returning 1-based quarter
     *
     * @remarks
     * - 1 = Jan - Mar
     * - 2 = Apr - Jun
     * - 3 = Jul - Sep
     * - 4 = Oct - Dec
     */
    get q(): number;
    /**
     * Alias readonly property, same as {@link DateTime.weekInYear}.
     */
    get w(): number;
    set(d: MaybeDate): this;
    copy(): DateTime;
    getTime(): number;
    withPrecision(prec: Precision): DateTime;
    setPrecision(prec: Precision): this;
    compare(d: MaybeDate): number;
    /**
     * Returns true if this instance is before the given date, i.e. if
     * `this.compare(d) < 0`.
     *
     * @param d -
     */
    isBefore(d: MaybeDate): boolean;
    /**
     * Returns true if this instance is before the given date, i.e. if
     * `this.compare(d) > 0`.
     *
     * @param d -
     */
    isAfter(d: MaybeDate): boolean;
    equiv(o: any): boolean;
    eqDelta(d: MaybeDate, eps?: number): boolean;
    daysInMonth(): number;
    dayInYear(): number;
    /**
     * Returns week number according to ISO8601.
     *
     * @remarks
     * Reference:
     * https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system
     *
     */
    weekInYear(): number;
    /**
     * Leap years are multiple of 4, excludingcentennial years that aren’t
     * multiples of 400.
     */
    isLeapYear(): boolean;
    incMillisecond(): number;
    decMillisecond(): number;
    incSecond(): number;
    decSecond(): number;
    incMinute(): number;
    decMinute(): number;
    incHour(): number;
    decHour(): number;
    incDay(): number;
    decDay(): number;
    incWeek(): number;
    decWeek(): number;
    incMonth(): number;
    decMonth(): number;
    incQuarter(): number;
    decQuarter(): number;
    incYear(): number;
    decYear(): number;
    /**
     * Returns a new `DateTime` instance relative to this date, but with given
     * period added/subtracted.
     *
     * @param x -
     * @param prec -
     */
    add(x: number, prec: Period): DateTime;
    toDate(): Date;
    toJSON(): string;
    toString(): string;
    /**
     * Returns formatted version using current {@link LOCALE.dateTime}
     * formatter.
     *
     * @remarks
     * The host environment's locale is NOT used. Only the currently active
     * `LOCALE` is relevant.
     */
    toLocaleString(): string;
    toISOString(): string;
    valueOf(): number;
}
/**
 * Coerces `x` to a {@link DateTime} instance.
 *
 * @param x -
 */
export declare const ensureDateTime: (x: MaybeDate, prec?: Precision) => DateTime;
/**
 * Returns true if `x` is a {@link MaybeDate}.
 *
 * @param x -
 */
export declare const maybeIsDate: (x: any) => x is string | number | DateTime | Date;
//# sourceMappingURL=datetime.d.ts.map