import { AppConfigService } from '../../services/app-config.service'; import * as i0 from "@angular/core"; export interface IDataItem { date: string; currentMonth?: boolean; dateValue: Date; } export interface IDataRow { items: IDataItem[]; mixed: boolean; } export interface ICalendarBody { rows: IDataRow[]; } export interface IDecadeYearsObject { title: string; items: number[][]; } export interface IMonthIdentity { year: number; monthIndex: number; } export interface IDateRange { startDate: Date; endDate: Date; } export type TimeZoneId = { raw: string; canonical: string; }; export declare class CoreDatetimeService { acs: AppConfigService; timeZoneOffset: any; $knownTimeZones: import("@angular/core").WritableSignal; constructor(); loadKnownTimezoneIdentifiers(): void; getMonthText(lang: string, monthIndex: number): string; dateToVnString(date: Date): string; dateToLocalizedString(value: Date, lang: string): string; private getOrdinalSuffix; getShortWeekdays(lang: string): any; getWeekdays(lang: string): any; getMonthNames(lang: string): any; private getMonoCalendarBody; getCalendarBody(year: number, monthIndex: number, direction?: number): ICalendarBody; getLastDateOfMonth(year: number, monthIndex: number): Date; getDecadeYearsObject(currentYear: number): IDecadeYearsObject; isDateString(date: string): boolean; monthIdentityToMonthString(monthIdentity: IMonthIdentity): string; dateToMonthString(date: Date): string; /** * Interprets a Date as a civil calendar date in a specific IANA timezone. * * Purpose: * - Given an absolute instant (JavaScript Date), * re-interpret it as a calendar date (YYYY-MM-DD) * as perceived in the provided IANA timezone. * * What this function DOES: * - Uses Intl.DateTimeFormat with `timeZone` to extract * year / month / day in the target timezone. * - Re-materializes a new Date using those calendar parts * in the browser's local runtime timezone. * * What this function DOES NOT do: * - Does NOT apply business rules (e.g. start-of-day / end-of-day). * - Does NOT modify hours, minutes, seconds explicitly. * - Does NOT depend on range semantics (start / inclusive-end). * - Does NOT mutate the input Date. * * Design notes: * - JavaScript Date always represents an absolute instant. * - "Date-only" values in business forms are civil concepts, * not instants in time. * - Timezone interpretation MUST be applied exactly once, * at form boundaries (e.g. writeValue / onChange). * * Usage constraints: * - This function is intended for form-layer normalization only. * - It MUST be optional and backward-compatible. * - Absence of timezone context MUST preserve legacy behavior. * * @param date Absolute Date (instant) * @param timezoneId IANA Time Zone ID (e.g. "Asia/Ho_Chi_Minh") * @returns Date representing the same civil day in local runtime timezone */ interpretDateInTimezone(date: Date, timezoneId: string): Date; canonicalizeTimeZone(tz: string): string; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; }