import { IDatePartsNumber, IDatePartsString } from "src/lib/helper";
export declare class PHXDateHelpers {
    calculateDateDifference(startDate: Date, endDate: Date, valueReturnIfNotValidDate?: number): number;
    dateStrToDate(date: string): string;
    dateStrToDateTime(date: string, isTimeFirst?: boolean): string;
    formatDateHyphen(timestamp: any): string;
    calculateRemainingTime(startTimeString: any, endTimeString: any): string;
    dateStrToTime(dateStr: string): string;
    isPastDate(compareDate: string): boolean;
    /**
     * Hàm phân tách chuỗi ngày tháng năm giờ phút
     * @param isoString ISO string
     * @returns Object with date parts
     */
    parseDateToParts(isoString: string, type: "number"): IDatePartsNumber;
    parseDateToParts(isoString: string, type?: "string"): IDatePartsString;
    unaccentValue(rawValue: string): string;
    stringToDate(dateString: string): Date;
    /**
     * Chuyển đổi chuỗi ngày tháng sang tên thứ trong tuần (tiếng Việt).
     *
     * Mục đích: dùng để hiển thị nhãn thứ trong tuần trên response trả về kèm tên thứ.
     *
     * Đầu vào: ISO 8601 string, ví dụ:
     *   - "2026-05-20"                    (date only)
     *   - "2026-05-20T07:00:00.000Z"      (UTC — lưu ý: có thể lệch ngày nếu server không chạy UTC+7)
     *   - "2026-05-20T07:00:00.000+07:00" (có offset, khuyến nghị dùng để tránh lệch ngày)
     *
     * Cách lấy nhanh date string trong JS:
     *   const dateStr = new Date().toISOString();   // "2026-05-20T07:00:00.000Z"
     *   const dateStr = apiResponse.created_at;     // Hasura/API trả sẵn ISO string, dùng trực tiếp
     *
     * Đầu ra: tên thứ tiếng Việt, hoặc null nếu date rỗng.
     *
     * @example
     * dateStringToDayLabel("2026-05-20T07:00:00.000+07:00") // "Thứ 4"
     * dateStringToDayLabel("2026-05-17T07:00:00.000+07:00") // "Chủ nhật"
     * dateStringToDayLabel("")                              // null
     */
    dateStringToDayLabel(date: string): string | null;
    isValidDateString(dateString: string): boolean;
    /**
     * Cộng hoặc trừ một số ngày vào ngày đầu vào và trả về `Date` mới.
     *
     * Hàm này không mutate đối tượng `Date` truyền vào. Giá trị ngày được chuẩn hóa
     * về chuỗi `YYYY-MM-DD`, chuyển sang số ngày tuyệt đối để cộng/trừ, sau đó dựng
     * lại thành `Date`.
     *
     * @param {Date} date Ngày gốc cần tính toán.
     * @param {number} amount Số ngày cần cộng thêm. Dùng số âm để lùi ngày.
     * @returns {Date | null} Ngày mới sau khi dịch chuyển, hoặc `null` nếu `date` không hợp lệ.
     * @memberof PHXDateHelpers
     */
    addDays(date: Date, amount: number): Date;
    /**
     * Lấy ngày bắt đầu của lưới calendar tháng theo chuẩn tuần bắt đầu từ thứ Hai.
     *
     * Ví dụ: nếu ngày đầu tháng rơi vào thứ Sáu thì hàm sẽ trả về ngày thứ Hai của
     * cùng hàng đầu tiên trong lịch, để có thể render đủ grid 7 cột.
     *
     * @param {Date} firstDateOfMonth Ngày đầu tiên của tháng đang hiển thị.
     * @returns {Date | null} Ngày bắt đầu của lưới calendar, hoặc `null` nếu đầu vào không hợp lệ.
     * @memberof PHXDateHelpers
     */
    getGridStartDate(firstDateOfMonth: Date): Date;
    /**
     * Kiểm tra một ngày có rơi vào cuối tuần hay không.
     *
     * Cuối tuần ở đây gồm:
     * - Thứ 7
     * - Chủ nhật
     *
     * @param {string} date Chuỗi ngày đầu vào.
     * @returns {boolean} `true` nếu là cuối tuần, ngược lại là `false`.
     * @memberof PHXDateHelpers
     */
    isWeekend(date: string): boolean;
    /**
     * Tính thứ trong tuần từ chuỗi ngày có định dạng `YYYY-MM-DD`.
     *
     * Hàm này parse chuỗi ngày thành các phần số rồi chuyển tiếp sang bộ tính weekday nội bộ.
     *
     * @private
     * @param {string} value Chuỗi ngày định dạng `YYYY-MM-DD`.
     * @returns {number} Chỉ số thứ trong tuần, với `0 = Chủ nhật` và `6 = Thứ 7`.
     * @memberof PHXDateHelpers
     */
    private getWeekdayFromYmdString;
    /**
     * Tính thứ trong tuần từ năm, tháng, ngày.
     *
     * @private
     * @param {number} year Năm.
     * @param {number} month Tháng, tính từ `1` đến `12`.
     * @param {number} day Ngày trong tháng.
     * @returns {number} Chỉ số thứ trong tuần, với `0 = Chủ nhật` và `6 = Thứ 7`.
     * @memberof PHXDateHelpers
     */
    private getWeekdayFromYmd;
    /**
     * Chuyển một ngày dương lịch thành số ngày tuyệt đối theo thuật toán civil date.
     *
     * Hàm này phục vụ cho các phép tính cộng/trừ ngày mà không phụ thuộc trực tiếp
     * vào thao tác mutate của `Date`.
     *
     * @private
     * @param {number} year Năm.
     * @param {number} month Tháng, tính từ `1` đến `12`.
     * @param {number} day Ngày trong tháng.
     * @returns {number} Số ngày tuyệt đối dùng cho tính toán nội bộ.
     * @memberof PHXDateHelpers
     */
    private daysFromCivil;
    /**
     * Chuyển số ngày tuyệt đối về lại ngày dương lịch.
     *
     * @private
     * @param {number} days Số ngày tuyệt đối.
     * @returns {{ year: number; month: number; day: number }} Đối tượng ngày tương ứng.
     * @memberof PHXDateHelpers
     */
    private civilFromDays;
    /**
     * Bổ sung số 0 ở đầu để đảm bảo chuỗi số có độ dài 2 ký tự.
     *
     * Ví dụ:
     * - `1` -> `"01"`
     * - `9` -> `"09"`
     * - `12` -> `"12"`
     *
     * @private
     * @param {number} value Giá trị số cần chuẩn hóa.
     * @returns {string} Chuỗi 2 ký tự.
     * @memberof PHXDateHelpers
     */
    private pad2;
}
