UNPKG

chrono-node

Version:

A natural language date parser in Javascript

64 lines 2.49 kB
import { AbstractParserWithWordBoundaryChecking } from "./AbstractParserWithWordBoundary.js"; const PATTERN = new RegExp("([0-9]{4})\\-([0-9]{1,2})\\-([0-9]{1,2})" + "(?:T" + "([0-9]{1,2}):([0-9]{1,2})" + "(?:" + ":([0-9]{1,2})(?:\\.(\\d{1,4}))?" + ")?" + "(" + "Z|([+-]\\d{2}):?(\\d{2})?" + ")?" + ")?" + "(?=\\W|$)", "i"); const YEAR_NUMBER_GROUP = 1; const MONTH_NUMBER_GROUP = 2; const DATE_NUMBER_GROUP = 3; const HOUR_NUMBER_GROUP = 4; const MINUTE_NUMBER_GROUP = 5; const SECOND_NUMBER_GROUP = 6; const MILLISECOND_NUMBER_GROUP = 7; const TZD_GROUP = 8; const TZD_HOUR_OFFSET_GROUP = 9; const TZD_MINUTE_OFFSET_GROUP = 10; export default class ISOFormatParser extends AbstractParserWithWordBoundaryChecking { innerPattern() { return PATTERN; } innerExtract(context, match) { const components = context.createParsingComponents({ "year": parseInt(match[YEAR_NUMBER_GROUP]), "month": parseInt(match[MONTH_NUMBER_GROUP]), "day": parseInt(match[DATE_NUMBER_GROUP]), }); if (match[HOUR_NUMBER_GROUP] != null) { components.assign("hour", parseInt(match[HOUR_NUMBER_GROUP])); components.assign("minute", parseInt(match[MINUTE_NUMBER_GROUP])); if (match[SECOND_NUMBER_GROUP] != null) { components.assign("second", parseInt(match[SECOND_NUMBER_GROUP])); } if (match[MILLISECOND_NUMBER_GROUP] != null) { components.assign("millisecond", parseInt(match[MILLISECOND_NUMBER_GROUP])); } if (match[TZD_GROUP] != null) { let offset = 0; if (match[TZD_HOUR_OFFSET_GROUP]) { const hourOffset = parseInt(match[TZD_HOUR_OFFSET_GROUP]); let minuteOffset = 0; if (match[TZD_MINUTE_OFFSET_GROUP] != null) { minuteOffset = parseInt(match[TZD_MINUTE_OFFSET_GROUP]); } offset = hourOffset * 60; if (offset < 0) { offset -= minuteOffset; } else { offset += minuteOffset; } } components.assign("timezoneOffset", offset); } } return components.addTag("parser/ISOFormatParser"); } } //# sourceMappingURL=ISOFormatParser.js.map