UNPKG

chrono-node

Version:

A natural language date parser in Javascript

78 lines 3.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const AbstractParserWithWordBoundary_1 = require("../../../../common/parsers/AbstractParserWithWordBoundary"); const duration_1 = require("../../../../calculation/duration"); 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 ZHHansDeadlineFormatParser 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 = (0, 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; } } const duration = {}; const unit = match[UNIT_GROUP]; const unitAbbr = unit[0]; if (unitAbbr.match(/[日天星礼月年]/)) { if (unitAbbr == "日" || unitAbbr == "天") { duration.day = number; } else if (unitAbbr == "星" || unitAbbr == "礼") { duration.week = number; } else if (unitAbbr == "月") { duration.month = number; } else if (unitAbbr == "年") { duration.year = number; } const date = (0, duration_1.addDuration)(context.refDate, duration); result.start.assign("year", date.getFullYear()); result.start.assign("month", date.getMonth() + 1); result.start.assign("day", date.getDate()); return result; } if (unitAbbr == "秒") { duration.second = number; } else if (unitAbbr == "分") { duration.minute = number; } else if (unitAbbr == "小" || unitAbbr == "钟") { duration.hour = number; } const date = (0, duration_1.addDuration)(context.refDate, duration); result.start.imply("year", date.getFullYear()); result.start.imply("month", date.getMonth() + 1); result.start.imply("day", date.getDate()); result.start.assign("hour", date.getHours()); result.start.assign("minute", date.getMinutes()); result.start.assign("second", date.getSeconds()); return result; } } exports.default = ZHHansDeadlineFormatParser; //# sourceMappingURL=ZHHansDeadlineFormatParser.js.map