UNPKG

codehard-datetime-converter

Version:

## How To install

106 lines (105 loc) 3.53 kB
// index.ts var RE_DMY = /^(\d{2})\/(\d{2})\/(\d{4})(?:[ T](.*))?$/; var RE_YMD = /^(\d{4})-(\d{2})-(\d{2})(?:[ T](.*))?$/; var RE_HMS = /^(\d{2}):(\d{2})(?::(\d{2}))?$/; var normalizeYear = (y) => y > 2400 ? y - 543 : y; var assertValid = (y, m, d) => { const dt = new Date(y, m - 1, d); if (dt.getFullYear() !== y || dt.getMonth() !== m - 1 || dt.getDate() !== d) { throw new Error("Invalid date value"); } }; var parseSafe = (input) => { if (input instanceof Date) { return new Date(input.getTime()); } const s = input.trim(); let m = RE_YMD.exec(s); if (m) { const y = normalizeYear(Number(m[1])); const mo = Number(m[2]); const d = Number(m[3]); assertValid(y, mo, d); if (m[4]) { const dt2 = new Date(s); if (isNaN(+dt2)) { throw new Error("Unsupported date/time"); } return dt2; } return new Date(y, mo - 1, d); } m = RE_DMY.exec(s); if (m) { const d = Number(m[1]); const mo = Number(m[2]); const y = normalizeYear(Number(m[3])); assertValid(y, mo, d); const base = new Date(y, mo - 1, d); if (m[4]) { const t = m[4].trim(); const tm = RE_HMS.exec(t); if (tm) { const hh = Number(tm[1]); const mi = Number(tm[2]); const ss = tm[3] ? Number(tm[3]) : 0; base.setHours(hh, mi, ss, 0); } else { const dt2 = new Date(s); if (!isNaN(+dt2)) { return dt2; } } } return base; } const dt = new Date(s); if (isNaN(+dt)) { throw new Error("Unsupported date format"); } return dt; }; var formatTimeTH = (dt, withSeconds = false) => new Intl.DateTimeFormat("th-TH", { hour: "2-digit", minute: "2-digit", second: withSeconds ? "2-digit" : undefined, hour12: false }).format(dt); var formatDate = (date, locale, month) => new Intl.DateTimeFormat(locale, { day: "2-digit", month, year: "numeric" }).format(date); var formatDateTime = (date, locale, month, withSeconds = false) => `${formatDate(date, locale, month)} ${formatTimeTH(date, withSeconds)}`; var toShortTHDate = (date) => formatDate(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "short" /* SHORT */); var toShortTHDateTime = (date) => `${formatDateTime(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "short" /* SHORT */)} น.`; var toLongTHDate = (date) => formatDate(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "long" /* LONG */); var toLongTHDateTime = (date) => `${formatDateTime(parseSafe(date), "th-TH-u-ca-buddhist" /* TH */, "long" /* LONG */)} น.`; var toShortUniversalDate = (date) => formatDate(parseSafe(date), "en-GB" /* EN */, "short" /* SHORT */); var toShortUniversalDateTime = (date) => formatDateTime(parseSafe(date), "en-GB" /* EN */, "short" /* SHORT */); var toLongUniversalDate = (date) => formatDate(parseSafe(date), "en-GB" /* EN */, "long" /* LONG */); var toLongUniversalDateTime = (date) => formatDateTime(parseSafe(date), "en-GB" /* EN */, "long" /* LONG */); var toTime = (date) => formatTimeTH(parseSafe(date)); var codehard_datetime_converter_default = { toShortTHDate, toShortTHDateTime, toLongTHDate, toLongTHDateTime, toShortUniversalDate, toShortUniversalDateTime, toLongUniversalDate, toLongUniversalDateTime, toTime }; export { toTime, toShortUniversalDateTime, toShortUniversalDate, toShortTHDateTime, toShortTHDate, toLongUniversalDateTime, toLongUniversalDate, toLongTHDateTime, toLongTHDate, codehard_datetime_converter_default as default };