chrono-node
Version:
A natural language date parser in Javascript
70 lines • 3.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../../../types");
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary");
const dates_1 = require("../../../utils/dates");
class FICasualTimeParser extends AbstractParserWithWordBoundary_1.AbstractParserWithWordBoundaryChecking {
innerPattern(context) {
return /(tänä\s*)?(aamulla|aamuna|aamupäivällä|päivällä|iltapäivällä|illalla|yöllä|keskiyöllä)(?=\W|$)/i;
}
innerExtract(context, match) {
const targetDate = context.refDate;
const timeKeywordPattern = match[2].toLowerCase();
const component = context.createParsingComponents();
(0, dates_1.implySimilarTime)(component, targetDate);
return FICasualTimeParser.extractTimeComponents(component, timeKeywordPattern);
}
static extractTimeComponents(component, timeKeywordPattern) {
switch (timeKeywordPattern) {
case "aamulla":
case "aamuna":
component.imply("hour", 6);
component.imply("minute", 0);
component.imply("second", 0);
component.imply("meridiem", types_1.Meridiem.AM);
break;
case "aamupäivällä":
component.imply("hour", 9);
component.imply("minute", 0);
component.imply("second", 0);
component.imply("meridiem", types_1.Meridiem.AM);
break;
case "päivällä":
component.imply("hour", 12);
component.imply("minute", 0);
component.imply("second", 0);
component.imply("meridiem", types_1.Meridiem.AM);
break;
case "iltapäivällä":
component.imply("hour", 15);
component.imply("minute", 0);
component.imply("second", 0);
component.imply("meridiem", types_1.Meridiem.PM);
break;
case "illalla":
component.imply("hour", 18);
component.imply("minute", 0);
component.imply("second", 0);
component.imply("meridiem", types_1.Meridiem.PM);
break;
case "yöllä":
component.imply("hour", 22);
component.imply("minute", 0);
component.imply("second", 0);
component.imply("meridiem", types_1.Meridiem.PM);
break;
case "keskiyöllä":
if (component.get("hour") > 1) {
component.addDurationAsImplied({ "day": 1 });
}
component.imply("hour", 0);
component.imply("minute", 0);
component.imply("second", 0);
component.imply("meridiem", types_1.Meridiem.AM);
break;
}
return component;
}
}
exports.default = FICasualTimeParser;
//# sourceMappingURL=FICasualTimeParser.js.map