UNPKG

jtc-utils

Version:
99 lines 4.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.formatDate = formatDate; const date_fns_1 = require("date-fns"); const JapaneseEra_ts_1 = require("./JapaneseEra.js"); const index_ts_1 = require("./locale/index.js"); const DateFormat_ts_1 = require("./util/DateFormat.js"); const getLocale_ts_1 = require("./util/getLocale.js"); const getTimeZone_ts_1 = require("./util/getTimeZone.js"); const getTimeZoneOffset_ts_1 = require("./util/getTimeZoneOffset.js"); function formatDate(date, format, options) { const timeZone = options?.timeZone; let dDate; if (!date) { return ""; } else if (typeof date === "number") { dDate = new Date(date); } else if (date instanceof Date) { if (timeZone && timeZone !== (0, getTimeZone_ts_1.getTimeZone)()) { dDate = new Date(date.getTime() - (0, getTimeZoneOffset_ts_1.getTimeZoneOffset)(date, timeZone)); } else { dDate = date; } } else { const sDate = date.toString(); dDate = (0, date_fns_1.parseISO)(sDate); if (!(0, date_fns_1.isValid)(dDate)) { return sDate; } if (timeZone && timeZone !== (0, getTimeZone_ts_1.getTimeZone)()) { dDate = new Date(dDate.getTime() - (0, getTimeZoneOffset_ts_1.getTimeZoneOffset)(dDate, timeZone)); } } const locale = options?.locale ?? (/^ja(-|$)/i.test((0, getLocale_ts_1.getLocale)()) ? index_ts_1.ja : index_ts_1.enUS); if (locale.code && /^ja-JP-u-ca-japanese$/i.test(locale.code)) { const era = JapaneseEra_ts_1.JapaneseEra.of(dDate); if (era) { const dFormat = DateFormat_ts_1.DateFormat.get(format); const parts = [...dFormat.parts]; for (let i = 0; i < parts.length; i++) { const part = parts[i]; if (part.type === "pattern") { if (part.text.startsWith("G")) { if (part.text.length <= 3) { parts[i] = { type: "quoted", text: `'${era.toLocaleString(locale.code, { style: "short" })}'`, }; } else if (part.text.length === 4) { parts[i] = { type: "quoted", text: `'${era.toLocaleString(locale.code, { style: "long" })}'`, }; } else { parts[i] = { type: "quoted", text: `'${era.toLocaleString(locale.code, { style: "narrow" })}'`, }; } } else if (part.text.startsWith("y")) { const gYear = dDate.getFullYear() - era.start.getFullYear() + 1; if (part.text.length === 1) { parts[i] = { type: "quoted", text: `'${gYear}'` }; } else if (part.text.endsWith("o")) { parts[i] = { type: "quoted", text: `'${gYear}年'` }; } else { parts[i] = { type: "quoted", text: `'${"0".repeat(part.text.length - gYear.toString().length)}${gYear}'`, }; } } } } format = new DateFormat_ts_1.DateFormat(parts).toString(); } } try { return (0, date_fns_1.format)(dDate, format, { locale }); } catch (err) { if (err instanceof RangeError) { return date.toString(); } else { throw err; } } } //# sourceMappingURL=formatDate.js.map