UNPKG

jtc-utils

Version:
78 lines 3.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseDate = parseDate; 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 parseDate(str, format, options) { if (str == null) { return undefined; } const locale = options?.locale ?? (/^ja(-|$)/i.test((0, getLocale_ts_1.getLocale)()) ? index_ts_1.ja : index_ts_1.enUS); const timeZone = options?.timeZone; try { let dDate; if (!format) { dDate = (0, date_fns_1.parseISO)(str); if (!(0, date_fns_1.isValid)(dDate)) { return null; } if (timeZone && timeZone !== (0, getTimeZone_ts_1.getTimeZone)() && !/(Z|[+-][0-9]{2}(:?[0-9]{2})?)$/.test(str)) { dDate = new Date(dDate.getTime() + (0, getTimeZoneOffset_ts_1.getTimeZoneOffset)(dDate, timeZone)); } } else { const parseOptions = { locale }; let era; if (locale.code && /^ja-JP-u-ca-japanese$/i.test(locale.code)) { parseOptions.locale = { ...locale, match: { ...locale.match, era(dateString, options) { let m; if ((m = /^([MTSHR]|明治?|大正?|昭和?|平成?|令和?)/.exec(dateString)) != null) { era = JapaneseEra_ts_1.JapaneseEra.from(m[0], { locale: "ja" }); return { value: 1, rest: dateString.substring(m[0].length), }; } else { return locale.match?.era(dateString, options); } }, }, }; } dDate = (0, date_fns_1.parse)(str, format, new Date(), parseOptions); if (!(0, date_fns_1.isValid)(dDate)) { return null; } if (era) { dDate.setFullYear(dDate.getFullYear() + era.start.getFullYear() - 1); } if (timeZone && timeZone !== (0, getTimeZone_ts_1.getTimeZone)() && !DateFormat_ts_1.DateFormat.get(format).parts.some((part) => part.type === "pattern" && /^[xX]/.test(part.text))) { dDate = new Date(dDate.getTime() + (0, getTimeZoneOffset_ts_1.getTimeZoneOffset)(dDate, timeZone)); } } return dDate; } catch (err) { if (err instanceof RangeError) { return null; } else { throw err; } } } //# sourceMappingURL=parseDate.js.map