UNPKG

chrono-node

Version:

A natural language date parser in Javascript

48 lines 1.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const constants_1 = require("../constants"); const years_1 = require("../../../calculation/years"); 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((0, constants_1.toHankaku)(match[MONTH_GROUP])); const day = parseInt((0, constants_1.toHankaku)(match[DAY_GROUP])); const components = context.createParsingComponents({ day: day, month: month, }); if (match[SPECIAL_YEAR_GROUP] && match[SPECIAL_YEAR_GROUP].match("同|今|本")) { components.assign("year", context.reference.getDateWithAdjustedTimezone().getFullYear()); } if (match[TYPICAL_YEAR_GROUP]) { const yearNumText = match[YEAR_NUMBER_GROUP]; let year = yearNumText == "元" ? 1 : parseInt((0, 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 = (0, years_1.findYearClosestToRef)(context.refDate, day, month); components.imply("year", year); } return components; } } exports.default = JPStandardParser; //# sourceMappingURL=JPStandardParser.js.map