phx-node
Version:
PHX NODE
138 lines (137 loc) • 6.12 kB
TypeScript
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;
}