import { Platform } from '@angular/cdk/platform';
import { DatetimeAdapter } from './datetime-adapter';
import { FdDate } from './fd-date';
import * as i0 from "@angular/core";
type CustomDateTimeFormatOptions = Omit<Intl.DateTimeFormatOptions, 'dayPeriod'> & {
    dayPeriod?: boolean;
};
/**
 * DatetimeAdapter implementation based on FdDate.
 *
 * This uses FdDate as a date model and relies on Intl.DateTimeFormat
 * for formatting and translation purposes.
 *
 */
export declare class FdDatetimeAdapter extends DatetimeAdapter<FdDate> {
    /** Whether to clamp the date between 1 and 9999 to avoid IE and Edge errors. */
    private readonly _fixYearsRangeIssue;
    /** @hidden */
    constructor(localeId: string, platform: Platform);
    /** @hidden */
    fromNow?(date: FdDate): string;
    /** Get year */
    getYear(date: FdDate): number;
    /** Get month */
    getMonth(date: FdDate): number;
    /** Get date */
    getDate(date: FdDate): number;
    /** Get day of week */
    getDayOfWeek(date: FdDate): number;
    /** Get hours */
    getHours(date: FdDate): number;
    /** Get minutes */
    getMinutes(date: FdDate): number;
    /** Get seconds */
    getSeconds(date: FdDate): number;
    /** Get week number */
    getWeekNumber(fdDate: FdDate): number;
    /** Get month names */
    getMonthNames(style: 'long' | 'short' | 'narrow'): string[];
    /** Get date names */
    getDateNames(): string[];
    /** Get day of week names */
    getDayOfWeekNames(style: 'long' | 'short' | 'narrow'): string[];
    /** Get year name */
    getYearName(date: FdDate): string;
    /** Get week name */
    getWeekName(date: FdDate): string;
    /** Get hour names */
    getHourNames({ meridian, twoDigit }: {
        twoDigit: boolean;
        meridian: boolean;
    }): string[];
    /** Get minute names */
    getMinuteNames({ twoDigit }: {
        twoDigit: boolean;
    }): string[];
    /** Get second names */
    getSecondNames({ twoDigit }: {
        twoDigit: boolean;
    }): string[];
    /** Get day period names */
    getDayPeriodNames(): [string, string];
    /** Set hours */
    setHours(date: FdDate, hours: number): FdDate;
    /** Set minutes */
    setMinutes(date: FdDate, hours: number): FdDate;
    /** Set seconds */
    setSeconds(date: FdDate, hours: number): FdDate;
    /** Get first day of week */
    getFirstDayOfWeek(): number;
    /** Get number of days in a month */
    getNumDaysInMonth(fdDate: FdDate): number;
    /** Create a date object */
    createDate(year: number, month?: number, date?: number): FdDate;
    /** Get a today date object */
    today(): FdDate;
    /** Get a now date object */
    now(): FdDate;
    /** Parse any value to date object */
    parse(value: any, parseFormat?: Intl.DateTimeFormatOptions): FdDate | null;
    /** Format date object to string */
    format(date: FdDate, displayFormat: CustomDateTimeFormatOptions): string;
    /** Add years to a date */
    addCalendarYears(date: FdDate, years: number): FdDate;
    /** Add months to a date */
    addCalendarMonths(fdDate: FdDate, months: number): FdDate;
    /** Add days to a date */
    addCalendarDays(fdDate: FdDate, days: number): FdDate;
    /** Clone a date object */
    clone(date: FdDate): FdDate;
    /** Check if date object is valid */
    isValid(date: FdDate): date is FdDate;
    /** Check if date between given dates */
    isBetween(dateToCheck: FdDate, startDate: FdDate, endDate: FdDate): boolean;
    /** Check if dates are equal */
    datesEqual(date1: FdDate, date2: FdDate): boolean;
    /** Check if dates and time are equal */
    dateTimesEqual(date1: FdDate, date2: FdDate): boolean;
    /** Format date object to ISO8601 string */
    toIso8601(fdDate: FdDate): string;
    /** Check if a time format includes a day period */
    isTimeFormatIncludesDayPeriod(displayFormat: CustomDateTimeFormatOptions): boolean;
    /** Check if a time format includes hours */
    isTimeFormatIncludesHours(displayFormat: Intl.DateTimeFormatOptions): boolean;
    /** Check if a time format includes minutes */
    isTimeFormatIncludesMinutes(displayFormat: Intl.DateTimeFormatOptions): boolean;
    /** Check if a time format includes seconds */
    isTimeFormatIncludesSeconds(displayFormat: Intl.DateTimeFormatOptions): boolean;
    /** Format with custom pattern including day period names */
    private _formatWithDayPeriod;
    /** Insert day period into the formatted string */
    private _insertDayPeriod;
    /** Get day period name based on the hour */
    private _getDayPeriodName;
    /** Format date using Intl.DateTimeFormat */
    private _formatWithIntl;
    /**
     * @hidden
     * Strip out unicode LTR and RTL characters. Edge and IE insert these into formatted dates while
     * other browsers do not. We remove them to make output consistent and because they interfere with
     * date parsing.
     * @param str The string to strip direction characters from.
     * @returns The stripped string.
     */
    private _stripDirectionalityCharacters;
    /** @hidden */
    private _format;
    /**
     * @hidden
     * Create native Date instance from FdDate
     * @param date FdDate instance
     * @returns date Native date instance
     */
    private _createDateInstanceByFdDate;
    /**
     * @hidden
     * Create native Date instance in UTC
     * @param year The year
     * @param month The month as a number between 0 and 11
     * @param day The date as a number between 1 and 31.
     * @param hours The hours as a number between 0 - 24
     * @param minutes The minutes as a number between 0 - 59
     * @param seconds The seconds as a number between 0 - 59
     * @param milliseconds The milliseconds as a number between 0 - 59
     */
    private _createUTCDateInstance;
    /** @hidden */
    private _createFdDateFromDateInstance;
    /**
     * @hidden
     *
     * Since FdDatetimeAdapter can parse only "en-US" locale
     * there is no reason to create comprehensive time parse
     * that can understand plenty of locales.
     *
     * @param timeStr Time string to parse (E.g. '10:30 PM')
     * @returns date Native date instance
     *
     */
    private _parseTimeString;
    static ɵfac: i0.ɵɵFactoryDeclaration<FdDatetimeAdapter, [{ optional: true; }, null]>;
    static ɵprov: i0.ɵɵInjectableDeclaration<FdDatetimeAdapter>;
}
export {};
