diff options
Diffstat (limited to 'bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/parsers/en/ENISOFormatParser.js')
-rw-r--r-- | bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/parsers/en/ENISOFormatParser.js | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/parsers/en/ENISOFormatParser.js b/bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/parsers/en/ENISOFormatParser.js new file mode 100644 index 00000000..66df1210 --- /dev/null +++ b/bin/wiki/ImportarDesdeURL/node_modules/chrono-node/src/parsers/en/ENISOFormatParser.js @@ -0,0 +1,103 @@ +/* + ISO 8601 + http://www.w3.org/TR/NOTE-datetime + - YYYY-MM-DD + - YYYY-MM-DDThh:mmTZD + - YYYY-MM-DDThh:mm:ssTZD + - YYYY-MM-DDThh:mm:ss.sTZD + - TZD = (Z or +hh:mm or -hh:mm) +*/ +var moment = require('moment'); +var Parser = require('../parser').Parser; +var ParsedResult = require('../../result').ParsedResult; + +var PATTERN = new RegExp('(\\W|^)' + + '([0-9]{4})\\-([0-9]{1,2})\\-([0-9]{1,2})' + + '(?:T' //.. + + '([0-9]{1,2}):([0-9]{1,2})' // hh:mm + + '(?::([0-9]{1,2})(?:\\.(\\d{1,4}))?)?' // :ss.s + + '(?:Z|([+-]\\d{2}):?(\\d{2})?)?' // TZD (Z or ±hh:mm or ±hhmm or ±hh) + + ')?' //.. + + '(?=\\W|$)', 'i'); + +var YEAR_NUMBER_GROUP = 2; +var MONTH_NUMBER_GROUP = 3; +var DATE_NUMBER_GROUP = 4; +var HOUR_NUMBER_GROUP = 5; +var MINUTE_NUMBER_GROUP = 6; +var SECOND_NUMBER_GROUP = 7; +var MILLISECOND_NUMBER_GROUP = 8; +var TZD_HOUR_OFFSET_GROUP = 9; +var TZD_MINUTE_OFFSET_GROUP = 10; + +exports.Parser = function ENISOFormatParser(){ + Parser.apply(this, arguments); + + this.pattern = function() { return PATTERN; } + + this.extract = function(text, ref, match, opt){ + + var text = match[0].substr(match[1].length); + var index = match.index + match[1].length; + + var result = new ParsedResult({ + text: text, + index: index, + ref: ref, + }) + + result.start.assign('year', parseInt(match[YEAR_NUMBER_GROUP])); + result.start.assign('month', parseInt(match[MONTH_NUMBER_GROUP])); + result.start.assign('day', parseInt(match[DATE_NUMBER_GROUP])); + + if (moment(result.start.get('month')) > 12 || moment(result.start.get('month')) < 1 || + moment(result.start.get('day')) > 31 || moment(result.start.get('day')) < 1) { + return null; + } + + if (match[HOUR_NUMBER_GROUP] != null) { + + result.start.assign('hour', + parseInt(match[HOUR_NUMBER_GROUP])); + result.start.assign('minute', + parseInt(match[MINUTE_NUMBER_GROUP])); + + if (match[SECOND_NUMBER_GROUP] != null) { + + result.start.assign('second', + parseInt(match[SECOND_NUMBER_GROUP])); + } + + if (match[MILLISECOND_NUMBER_GROUP] != null) { + + result.start.assign('millisecond', + parseInt(match[MILLISECOND_NUMBER_GROUP])); + } + + if (match[TZD_HOUR_OFFSET_GROUP] == null) { + + result.start.assign('timezoneOffset', 0); + } else { + + var minuteOffset = 0; + var hourOffset = parseInt(match[TZD_HOUR_OFFSET_GROUP]); + if (match[TZD_MINUTE_OFFSET_GROUP] != null) + minuteOffset = parseInt(match[TZD_MINUTE_OFFSET_GROUP]); + + var offset = hourOffset * 60; + if (offset < 0) { + offset -= minuteOffset; + } else { + offset += minuteOffset; + } + + result.start.assign('timezoneOffset', offset); + } + } + + result.tags['ENISOFormatParser'] = true; + return result; + }; + +} + |