UNPKG

chrono-node

Version:

A natural language date parser in Javascript

53 lines 2.05 kB
"use strict"; 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