UNPKG

jalaliday

Version:

Persian (Jalali, Khorshidi) Plugin for Day.js

68 lines (67 loc) 2.16 kB
//#region src/intl/format.ts const defaultOptions = { locale: "fa-IR-u-ca-persian", defaultFormat: "YYYY/MM/DD", timeZone: "Asia/Tehran" }; const tokenMap = { YYYY: (parts) => parts.year ?? "", YY: (parts) => parts.year ? parts.year.slice(-2) : "", MM: (parts) => parts.month ?? "", M: (parts) => parts.month ? String(parts.month) : "", DD: (parts) => parts.day ?? "", D: (parts) => parts.day ? String(parts.day) : "", HH: (parts) => parts.hour ?? "00", H: (parts) => parts.hour ? String(parts.hour) : "0", mm: (parts) => parts.minute ?? "00", m: (parts) => parts.minute ? String(parts.minute) : "0", ss: (parts) => parts.second ?? "00", s: (parts) => parts.second ? String(parts.second) : "0" }; const tokenRegex = /YYYY|YY|MM|M|DD|D|HH|H|mm|m|ss|s/g; function createFormatter(opts = defaultOptions) { const { locale, defaultFormat, timeZone } = { ...defaultOptions, ...opts }; const formatter = new Intl.DateTimeFormat(locale, { year: "numeric", month: "2-digit", day: "2-digit", numberingSystem: "latn", hour: "2-digit", minute: "2-digit", second: "2-digit", hour12: false, timeZone }); /** * Formats a Date object using a Day.js-like format string (limited to supported tokens). * @param date - The Date object to format * @param format - The format string (e.g., 'YYYY/MM/DD HH:mm:ss') * @returns The formatted date string */ return function formatDate$1(date, format) { const parts = formatter.formatToParts(date).reduce((acc, part) => { if (part.type !== "literal") acc[part.type] = part.value; return acc; }, {}); return (format || defaultFormat || "YYYY/MM/DD").replace(tokenRegex, (token) => { const fn = tokenMap[token]; return fn ? fn(parts) : token; }); }; } /** * Formats a Date object using a Day.js-like format string (limited to supported tokens). * @param date - The Date object to format * @param format - The format string (e.g., 'YYYY/MM/DD HH:mm:ss') * @returns The formatted date string */ const formatDate = createFormatter({ locale: "fa-IR-u-ca-persian", defaultFormat: "YYYY/MM/DD", timeZone: "Asia/Tehran" }); //#endregion export { createFormatter, formatDate };