UNPKG

chrono-node

Version:

A natural language date parser in Javascript

79 lines 3.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 dayjs_1 = __importDefault(require("dayjs")); const AbstractParserWithWordBoundary_1 = require("../../../../common/parsers/AbstractParserWithWordBoundary"); const constants_1 = require("../constants"); const PATTERN = new RegExp("(\\d+|[" + Object.keys(constants_1.NUMBER).join("") + "]+|半|幾)(?:\\s*)" + "(?:個)?" + "(秒(?:鐘)?|分鐘|小時|鐘|日|天|星期|禮拜|月|年)" + "(?:(?:之|過)?後|(?:之)?內)", "i"); const NUMBER_GROUP = 1; const UNIT_GROUP = 2; class ZHHantDeadlineFormatParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking { innerPattern() { return PATTERN; } innerExtract(context, match) { const result = context.createParsingResult(match.index, match[0]); let number = parseInt(match[NUMBER_GROUP]); if (isNaN(number)) { number = constants_1.zhStringToNumber(match[NUMBER_GROUP]); } if (isNaN(number)) { const string = match[NUMBER_GROUP]; if (string === "幾") { number = 3; } else if (string === "半") { number = 0.5; } else { return null; } } let date = dayjs_1.default(context.refDate); const unit = match[UNIT_GROUP]; const unitAbbr = unit[0]; if (unitAbbr.match(/[日天星禮月年]/)) { if (unitAbbr == "日" || unitAbbr == "天") { date = date.add(number, "d"); } else if (unitAbbr == "星" || unitAbbr == "禮") { date = date.add(number * 7, "d"); } else if (unitAbbr == "月") { date = date.add(number, "month"); } else if (unitAbbr == "年") { date = date.add(number, "year"); } result.start.assign("year", date.year()); result.start.assign("month", date.month() + 1); result.start.assign("day", date.date()); return result; } if (unitAbbr == "秒") { date = date.add(number, "second"); } else if (unitAbbr == "分") { date = date.add(number, "minute"); } else if (unitAbbr == "小" || unitAbbr == "鐘") { date = date.add(number, "hour"); } result.start.imply("year", date.year()); result.start.imply("month", date.month() + 1); result.start.imply("day", date.date()); result.start.assign("hour", date.hour()); result.start.assign("minute", date.minute()); result.start.assign("second", date.second()); return result; } } exports.default = ZHHantDeadlineFormatParser; //# sourceMappingURL=ZHHantDeadlineFormatParser.js.map