jtc-utils
Version:
Utilities for Japanese Traditional Companies
99 lines • 4.05 kB
JavaScript
;
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