jtc-utils
Version:
Utilities for Japanese Traditional Companies
78 lines • 2.94 kB
JavaScript
import { parseISO } from "date-fns";
import { escapeRegExp } from "./util/escapeRegExp.js";
import { getLocale } from "./util/getLocale.js";
export class JapaneseEra {
static values() {
return [
JapaneseEra.MEIJI,
JapaneseEra.TAISHO,
JapaneseEra.SHOWA,
JapaneseEra.HEISEI,
JapaneseEra.REIWA,
];
}
static of(date) {
for (const value of JapaneseEra.values()) {
if (value.includes(date)) {
return value;
}
}
}
static from(name, options) {
const locale = options?.locale ?? getLocale();
const keyRE = new RegExp(`^${escapeRegExp(name)}$`, "i");
for (const value of JapaneseEra.values()) {
if (keyRE.test(value.name)) {
return value;
}
const localNames = value.localeNames[locale] ?? value.localeNames.en;
for (const key in localNames) {
if (keyRE.test(localNames[key])) {
return value;
}
}
}
}
constructor(name, localeNames, start, end) {
this.name = name;
this.localeNames = localeNames;
this.start = start;
this.end = end;
}
includes(date) {
return this.start <= date && (this.end == null || this.end > date);
}
toLocaleString(locale, options) {
const target = (locale ?? getLocale()).split(/-/g)[0];
const style = options?.style || "long";
const names = this.localeNames[target];
if (names) {
return names[style];
}
return this.localeNames.en[style];
}
toString() {
return this.name;
}
}
JapaneseEra.MEIJI = new JapaneseEra("MEIJI", {
ja: { long: "明治", short: "明", narrow: "M" },
en: { long: "Meiji", short: "Mei", narrow: "M" },
}, parseISO("1868-10-23T00:00:00+09:00"), parseISO("1912-07-30T00:00:00+09:00"));
JapaneseEra.TAISHO = new JapaneseEra("TAISHO", {
ja: { long: "大正", short: "大", narrow: "T" },
en: { long: "Taisho", short: "Tai", narrow: "T" },
}, parseISO("1912-07-30T00:00:00+09:00"), parseISO("1926-12-26T00:00:00+09:00"));
JapaneseEra.SHOWA = new JapaneseEra("SHOWA", {
ja: { long: "昭和", short: "昭", narrow: "S" },
en: { long: "Showa", short: "Sho", narrow: "S" },
}, parseISO("1926-12-26T00:00:00+09:00"), parseISO("1989-01-08T00:00:00+09:00"));
JapaneseEra.HEISEI = new JapaneseEra("HEISEI", {
ja: { long: "平成", short: "平", narrow: "H" },
en: { long: "Heisei", short: "Hei", narrow: "H" },
}, parseISO("1989-01-08T00:00:00+09:00"), parseISO("2019-05-01T00:00:00+09:00"));
JapaneseEra.REIWA = new JapaneseEra("REIWA", {
ja: { long: "令和", short: "令", narrow: "R" },
en: { long: "Reiwa", short: "Rei", narrow: "R" },
}, parseISO("2019-05-01T00:00:00+09:00"));
//# sourceMappingURL=JapaneseEra.js.map