chrono-node
Version:
A natural language date parser in Javascript
53 lines • 2.05 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../constants");
const years_1 = require("../../../calculation/years");
const dayjs_1 = __importDefault(require("dayjs"));
const PATTERN = /(?:(?:([同今本])|((昭和|平成|令和)?([0-90-9]{1,4}|元)))年\s*)?([0-90-9]{1,2})月\s*([0-90-9]{1,2})日/i;
const SPECIAL_YEAR_GROUP = 1;
const TYPICAL_YEAR_GROUP = 2;
const ERA_GROUP = 3;
const YEAR_NUMBER_GROUP = 4;
const MONTH_GROUP = 5;
const DAY_GROUP = 6;
class JPStandardParser {
pattern() {
return PATTERN;
}
extract(context, match) {
const month = parseInt(constants_1.toHankaku(match[MONTH_GROUP]));
const day = parseInt(constants_1.toHankaku(match[DAY_GROUP]));
const components = context.createParsingComponents({
day: day,
month: month,
});
if (match[SPECIAL_YEAR_GROUP] && match[SPECIAL_YEAR_GROUP].match("同|今|本")) {
const moment = dayjs_1.default(context.refDate);
components.assign("year", moment.year());
}
if (match[TYPICAL_YEAR_GROUP]) {
const yearNumText = match[YEAR_NUMBER_GROUP];
let year = yearNumText == "元" ? 1 : parseInt(constants_1.toHankaku(yearNumText));
if (match[ERA_GROUP] == "令和") {
year += 2018;
}
else if (match[ERA_GROUP] == "平成") {
year += 1988;
}
else if (match[ERA_GROUP] == "昭和") {
year += 1925;
}
components.assign("year", year);
}
else {
const year = years_1.findYearClosestToRef(context.refDate, day, month);
components.imply("year", year);
}
return components;
}
}
exports.default = JPStandardParser;
//# sourceMappingURL=JPStandardParser.js.map
;