chrono-node 1.3.5 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.travis.yml +2 -0
- package/README.md +100 -86
- package/dist/chrono.js +7865 -0
- package/dist/chrono.js.map +1 -0
- package/dist/chrono.min.js +3 -0
- package/dist/chrono.min.js.LICENSE.txt +19 -0
- package/dist/chrono.min.js.map +1 -0
- package/package.json +20 -22
- package/src/chrono.js +5 -3
- package/src/options.js +33 -3
- package/src/parsers/{DE → de}/DECasualDateParser.js +18 -21
- package/src/parsers/{DE → de}/DEDeadlineFormatParser.js +9 -9
- package/src/parsers/{DE → de}/DEMonthNameLittleEndianParser.js +15 -36
- package/src/parsers/{DE → de}/DEMonthNameParser.js +12 -27
- package/src/parsers/{DE → de}/DESlashDateFormatParser.js +2 -3
- package/src/parsers/{DE → de}/DETimeAgoFormatParser.js +9 -14
- package/src/parsers/{DE → de}/DETimeExpressionParser.js +2 -2
- package/src/parsers/{DE → de}/DEWeekdayParser.js +14 -14
- package/src/parsers/{EN → en}/ENCasualDateParser.js +6 -11
- package/src/parsers/en/ENCasualTimeParser.js +54 -0
- package/src/parsers/{EN → en}/ENDeadlineFormatParser.js +15 -20
- package/src/parsers/{EN → en}/ENISOFormatParser.js +3 -3
- package/src/parsers/{EN → en}/ENMonthNameLittleEndianParser.js +25 -49
- package/src/parsers/{EN → en}/ENMonthNameMiddleEndianParser.js +6 -23
- package/src/parsers/{EN → en}/ENMonthNameParser.js +5 -22
- package/src/parsers/{EN → en}/ENRelativeDateFormatParser.js +48 -15
- package/src/parsers/{EN → en}/ENSlashDateFormatParser.js +7 -3
- package/src/parsers/{EN → en}/ENSlashDateFormatStartWithYearParser.js +12 -5
- package/src/parsers/{EN → en}/ENSlashMonthFormatParser.js +2 -5
- package/src/parsers/en/ENTimeAgoFormatParser.js +69 -0
- package/src/parsers/{EN → en}/ENTimeExpressionParser.js +26 -17
- package/src/parsers/en/ENTimeLaterFormatParser.js +75 -0
- package/src/parsers/{EN → en}/ENWeekdayParser.js +8 -12
- package/src/parsers/{ES → es}/ESCasualDateParser.js +8 -13
- package/src/parsers/{ES → es}/ESDeadlineFormatParser.js +5 -11
- package/src/parsers/{ES → es}/ESMonthNameLittleEndianParser.js +6 -28
- package/src/parsers/{ES → es}/ESSlashDateFormatParser.js +2 -2
- package/src/parsers/{ES → es}/ESTimeAgoFormatParser.js +8 -13
- package/src/parsers/{ES → es}/ESTimeExpressionParser.js +2 -7
- package/src/parsers/{ES → es}/ESWeekdayParser.js +1 -6
- package/src/parsers/{FR → fr}/FRCasualDateParser.js +6 -11
- package/src/parsers/{FR → fr}/FRDeadlineFormatParser.js +9 -14
- package/src/parsers/{FR → fr}/FRMonthNameLittleEndianParser.js +4 -26
- package/src/parsers/{FR → fr}/FRRelativeDateFormatParser.js +29 -34
- package/src/parsers/{FR → fr}/FRSlashDateFormatParser.js +22 -15
- package/src/parsers/{FR → fr}/FRTimeAgoFormatParser.js +8 -14
- package/src/parsers/{FR → fr}/FRTimeExpressionParser.js +2 -7
- package/src/parsers/{FR → fr}/FRWeekdayParser.js +1 -6
- package/src/parsers/{JP → ja}/JPCasualDateParser.js +5 -10
- package/src/parsers/ja/JPStandardParser.js +71 -0
- package/src/parsers/parser.js +80 -53
- package/src/parsers/pt/PTCasualDateParser.js +123 -0
- package/src/parsers/pt/PTDeadlineFormatParser.js +61 -0
- package/src/parsers/pt/PTMonthNameLittleEndianParser.js +86 -0
- package/src/parsers/pt/PTSlashDateFormatParser.js +114 -0
- package/src/parsers/pt/PTTimeAgoFormatParser.js +87 -0
- package/src/parsers/pt/PTTimeExpressionParser.js +234 -0
- package/src/parsers/pt/PTWeekdayParser.js +60 -0
- package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantCasualDateParser.js +30 -19
- package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDateParser.js +2 -7
- package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDeadlineFormatParser.js +14 -19
- package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantTimeExpressionParser.js +38 -11
- package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantWeekdayParser.js +1 -7
- package/src/refiners/ExtractTimezoneAbbrRefiner.js +19 -10
- package/src/refiners/ForwardDateRefiner.js +10 -15
- package/src/refiners/{DE → de}/DEMergeDateRangeRefiner.js +1 -1
- package/src/refiners/{DE → de}/DEMergeDateTimeRefiner.js +3 -3
- package/src/refiners/{EN → en}/ENMergeDateRangeRefiner.js +5 -9
- package/src/refiners/{EN → en}/ENMergeDateTimeRefiner.js +15 -2
- package/src/refiners/{EN → en}/ENMergeWeekdayRefiner.js +0 -0
- package/src/refiners/{EN → en}/ENPrioritizeSpecificDateRefiner.js +0 -0
- package/src/refiners/{FR → fr}/FRMergeDateRangeRefiner.js +0 -0
- package/src/refiners/{FR → fr}/FRMergeDateTimeRefiner.js +1 -1
- package/src/refiners/{JP → ja}/JPMergeDateRangeRefiner.js +1 -1
- package/src/refiners/refiner.js +12 -12
- package/src/result.js +47 -19
- package/src/timezone.js +2 -0
- package/src/utils/EN.js +68 -2
- package/src/utils/PT.js +62 -0
- package/test/de/de.test.js +51 -0
- package/test/de/de_casual.test.js +432 -0
- package/test/de/de_dash.test.js +6 -0
- package/test/de/de_deadline.test.js +244 -0
- package/test/de/de_little_endian.test.js +459 -0
- package/test/de/de_time_ago.test.js +313 -0
- package/test/de/de_time_exp.test.js +166 -0
- package/test/de/de_weekday.test.js +235 -0
- package/test/en/en.test.js +250 -0
- package/test/en/en_casual.test.js +461 -0
- package/test/en/en_dash.test.js +31 -0
- package/test/en/en_deadline.test.js +366 -0
- package/test/{test_example.js → en/en_example.test.js} +7 -18
- package/test/en/en_inter_std.test.js +269 -0
- package/test/en/en_little_endian.test.js +566 -0
- package/test/en/en_middle_endian.test.js +552 -0
- package/test/en/en_month.test.js +156 -0
- package/test/en/en_option_forward.test.js +156 -0
- package/test/en/en_relative.test.js +228 -0
- package/test/en/en_slash.test.js +450 -0
- package/test/en/en_time_ago.test.js +374 -0
- package/test/en/en_time_exp.test.js +722 -0
- package/test/en/en_time_from_now.test.js +371 -0
- package/test/en/en_time_later.test.js +95 -0
- package/test/en/en_weekday.test.js +301 -0
- package/test/es/es_casual.test.js +258 -0
- package/test/es/es_dash.test.js +13 -0
- package/test/es/es_deadline.test.js +85 -0
- package/test/es/es_little_endian.test.js +350 -0
- package/test/es/es_slash.test.js +24 -0
- package/test/es/es_time_ago.test.js +137 -0
- package/test/es/es_time_exp.test.js +240 -0
- package/test/fr/fr_casual.test.js +454 -0
- package/test/fr/fr_dash.test.js +26 -0
- package/test/fr/fr_deadline.test.js +244 -0
- package/test/fr/fr_little_endian.test.js +576 -0
- package/test/fr/fr_relative.test.js +198 -0
- package/test/fr/fr_slash.test.js +81 -0
- package/test/fr/fr_time_ago.test.js +194 -0
- package/test/fr/fr_time_exp.test.js +960 -0
- package/test/fr/fr_weekday.test.js +200 -0
- package/test/ja/ja_casual.test.js +51 -0
- package/test/ja/ja_standard.test.js +344 -0
- package/test/pt/pt_casual.test.js +258 -0
- package/test/pt/pt_dash.test.js +13 -0
- package/test/pt/pt_deadline.test.js +85 -0
- package/test/pt/pt_little_endian.test.js +350 -0
- package/test/pt/pt_slash.test.js +44 -0
- package/test/pt/pt_time_ago.test.js +137 -0
- package/test/pt/pt_time_exp.test.js +240 -0
- package/test/system.test.js +207 -0
- package/test/zh/zh_hant_casual.test.js +340 -0
- package/test/zh/zh_hant_date.test.js +118 -0
- package/test/zh/zh_hant_deadline.test.js +213 -0
- package/test/zh/zh_hant_time_exp.test.js +226 -0
- package/test/zh/zh_hant_weekday.test.js +160 -0
- package/webpack.config.js +39 -0
- package/.npmignore +0 -11
- package/bower.json +0 -24
- package/chrono.js +0 -11892
- package/chrono.map.json +0 -1
- package/chrono.min.js +0 -148
- package/chrono.min.json +0 -1
- package/karma.conf.js +0 -68
- package/src/parsers/EN/ENCasualTimeParser.js +0 -53
- package/src/parsers/EN/ENTimeAgoFormatParser.js +0 -130
- package/src/parsers/EN/ENTimeFromNowFormatParser.js +0 -119
- package/src/parsers/JP/JPStandardParser.js +0 -88
- package/test/test_de.js +0 -62
- package/test/test_de_casual.js +0 -443
- package/test/test_de_dash.js +0 -17
- package/test/test_de_deadline.js +0 -255
- package/test/test_de_little_endian.js +0 -470
- package/test/test_de_time_ago.js +0 -324
- package/test/test_de_time_exp.js +0 -177
- package/test/test_de_weekday.js +0 -246
- package/test/test_en.js +0 -249
- package/test/test_en_casual.js +0 -448
- package/test/test_en_dash.js +0 -42
- package/test/test_en_deadline.js +0 -311
- package/test/test_en_inter_std.js +0 -272
- package/test/test_en_little_endian.js +0 -529
- package/test/test_en_middle_endian.js +0 -563
- package/test/test_en_month.js +0 -124
- package/test/test_en_option_forward.js +0 -167
- package/test/test_en_relative.js +0 -206
- package/test/test_en_slash.js +0 -370
- package/test/test_en_time_ago.js +0 -385
- package/test/test_en_time_exp.js +0 -663
- package/test/test_en_time_from_now.js +0 -345
- package/test/test_en_weekday.js +0 -312
- package/test/test_es_casual.js +0 -269
- package/test/test_es_dash.js +0 -24
- package/test/test_es_deadline.js +0 -96
- package/test/test_es_little_endian.js +0 -361
- package/test/test_es_slash.js +0 -35
- package/test/test_es_time_ago.js +0 -148
- package/test/test_es_time_exp.js +0 -251
- package/test/test_fr_casual.js +0 -465
- package/test/test_fr_dash.js +0 -37
- package/test/test_fr_deadline.js +0 -255
- package/test/test_fr_little_endian.js +0 -568
- package/test/test_fr_relative.js +0 -209
- package/test/test_fr_slash.js +0 -54
- package/test/test_fr_time_ago.js +0 -205
- package/test/test_fr_time_exp.js +0 -971
- package/test/test_fr_weekday.js +0 -211
- package/test/test_jp_casual.js +0 -62
- package/test/test_jp_standard.js +0 -181
- package/test/test_system.js +0 -178
- package/test/test_zh_hant_casual.js +0 -329
- package/test/test_zh_hant_date.js +0 -129
- package/test/test_zh_hant_deadline.js +0 -224
- package/test/test_zh_hant_time_exp.js +0 -210
- package/test/test_zh_hant_weekday.js +0 -171
- package/timezone.js +0 -9
package/package.json
CHANGED
|
@@ -1,41 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chrono-node",
|
|
3
3
|
"description": "A natural language date parser in Javascript",
|
|
4
|
-
"homepage": "http://github.com/
|
|
4
|
+
"homepage": "http://github.com/wanasit/chrono",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
|
-
"url": "https://github.com/
|
|
7
|
+
"url": "https://github.com/wanasit/chrono.git"
|
|
8
|
+
},
|
|
9
|
+
"jest": {
|
|
10
|
+
"verbose": true,
|
|
11
|
+
"testURL": "http://localhost/"
|
|
8
12
|
},
|
|
9
13
|
"license": "MIT",
|
|
10
|
-
"version": "1.
|
|
14
|
+
"version": "1.4.4",
|
|
11
15
|
"directories": {
|
|
12
16
|
"source": "./src",
|
|
13
17
|
"test": "./test"
|
|
14
18
|
},
|
|
15
|
-
"main": "./
|
|
19
|
+
"main": "./dist/chrono.js",
|
|
16
20
|
"devDependencies": {
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"minifyify": "^7.0.6",
|
|
26
|
-
"qunit": "^1.0.0",
|
|
27
|
-
"watchify": "^3.9.0"
|
|
21
|
+
"@babel/core": "^7.8.4",
|
|
22
|
+
"@babel/preset-env": "^7.8.4",
|
|
23
|
+
"babel-loader": "^8.0.6",
|
|
24
|
+
"coveralls": "^3.0.2",
|
|
25
|
+
"jest": "^22.0.4",
|
|
26
|
+
"terser-webpack-plugin": "^2.3.4",
|
|
27
|
+
"webpack": "^4.41.5",
|
|
28
|
+
"webpack-cli": "^3.3.10"
|
|
28
29
|
},
|
|
29
30
|
"scripts": {
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"watch": "watchify src/chrono.js -d --s chrono -o chrono.js",
|
|
34
|
-
"karma": "karma start",
|
|
35
|
-
"test": "qunit -l '{summary:true, tests: true}' -c chrono:src/chrono.js -p src -t test/*.js --cov --timeout 10000",
|
|
31
|
+
"build": "webpack",
|
|
32
|
+
"watch": "jest --watch",
|
|
33
|
+
"test": "jest --coverage",
|
|
36
34
|
"coveralls": "npm run test && cat coverage/lcov.info | coveralls"
|
|
37
35
|
},
|
|
38
36
|
"dependencies": {
|
|
39
|
-
"
|
|
37
|
+
"dayjs": "^1.8.19"
|
|
40
38
|
}
|
|
41
39
|
}
|
package/src/chrono.js
CHANGED
|
@@ -14,8 +14,6 @@ exports.ParsedComponents = require('./result').ParsedComponents;
|
|
|
14
14
|
var Chrono = function(option) {
|
|
15
15
|
|
|
16
16
|
option = option || exports.options.casualOption();
|
|
17
|
-
|
|
18
|
-
this.option = option;
|
|
19
17
|
this.parsers = new Object(option.parsers);
|
|
20
18
|
this.refiners = new Object(option.refiners);
|
|
21
19
|
};
|
|
@@ -25,7 +23,8 @@ Chrono.prototype.parse = function(text, refDate, opt) {
|
|
|
25
23
|
|
|
26
24
|
refDate = refDate || new Date();
|
|
27
25
|
opt = opt || {};
|
|
28
|
-
|
|
26
|
+
opt.forwardDate = opt.forwardDate || opt.forwardDate;
|
|
27
|
+
|
|
29
28
|
var allResults = [];
|
|
30
29
|
|
|
31
30
|
this.parsers.forEach(function (parser) {
|
|
@@ -66,6 +65,9 @@ exports.en_GB = new Chrono( options.mergeOptions([
|
|
|
66
65
|
exports.de = new Chrono( options.mergeOptions([
|
|
67
66
|
options.de.casual, options.en, options.commonPostProcessing]));
|
|
68
67
|
|
|
68
|
+
exports.pt = new Chrono( options.mergeOptions([
|
|
69
|
+
options.pt.casual, options.en, options.commonPostProcessing]));
|
|
70
|
+
|
|
69
71
|
exports.es = new Chrono( options.mergeOptions([
|
|
70
72
|
options.es.casual, options.en, options.commonPostProcessing]));
|
|
71
73
|
|
package/src/options.js
CHANGED
|
@@ -56,11 +56,12 @@ exports.commonPostProcessing = function() {
|
|
|
56
56
|
exports.strictOption = function () {
|
|
57
57
|
var strictConfig = {
|
|
58
58
|
strict: true
|
|
59
|
-
}
|
|
59
|
+
};
|
|
60
60
|
|
|
61
61
|
return exports.mergeOptions([
|
|
62
62
|
exports.en(strictConfig),
|
|
63
63
|
exports.de(strictConfig),
|
|
64
|
+
exports.pt(strictConfig),
|
|
64
65
|
exports.es(strictConfig),
|
|
65
66
|
exports.fr(strictConfig),
|
|
66
67
|
exports.ja(strictConfig),
|
|
@@ -74,6 +75,7 @@ exports.casualOption = function () {
|
|
|
74
75
|
exports.en.casual,
|
|
75
76
|
// Some German abbriviate overlap with common English
|
|
76
77
|
exports.de({ strict: true }),
|
|
78
|
+
exports.pt.casual,
|
|
77
79
|
exports.es.casual,
|
|
78
80
|
exports.fr.casual,
|
|
79
81
|
exports.ja.casual,
|
|
@@ -129,7 +131,7 @@ exports.en = function(config) {
|
|
|
129
131
|
new parser.ENSlashDateFormatStartWithYearParser(config),
|
|
130
132
|
new parser.ENSlashMonthFormatParser(config),
|
|
131
133
|
new parser.ENTimeAgoFormatParser(config),
|
|
132
|
-
new parser.
|
|
134
|
+
new parser.ENTimeLaterFormatParser(config),
|
|
133
135
|
new parser.ENTimeExpressionParser(config)
|
|
134
136
|
],
|
|
135
137
|
refiners: [
|
|
@@ -149,7 +151,7 @@ exports.en.casual = function(config) {
|
|
|
149
151
|
config.strict = false;
|
|
150
152
|
var option = exports.en(config);
|
|
151
153
|
|
|
152
|
-
//
|
|
154
|
+
// en
|
|
153
155
|
option.parsers.unshift(new parser.ENCasualDateParser());
|
|
154
156
|
option.parsers.unshift(new parser.ENCasualTimeParser());
|
|
155
157
|
option.parsers.unshift(new parser.ENWeekdayParser());
|
|
@@ -191,6 +193,34 @@ exports.ja.casual = function() {
|
|
|
191
193
|
return option;
|
|
192
194
|
};
|
|
193
195
|
|
|
196
|
+
// -------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
exports.pt = function(config) {
|
|
200
|
+
return {
|
|
201
|
+
parsers: [
|
|
202
|
+
new parser.PTTimeAgoFormatParser(config),
|
|
203
|
+
new parser.PTDeadlineFormatParser(config),
|
|
204
|
+
new parser.PTTimeExpressionParser(config),
|
|
205
|
+
new parser.PTMonthNameLittleEndianParser(config),
|
|
206
|
+
new parser.PTSlashDateFormatParser(config)
|
|
207
|
+
],
|
|
208
|
+
refiners: [
|
|
209
|
+
new refiner.OverlapRemovalRefiner(),
|
|
210
|
+
new refiner.ForwardDateRefiner()
|
|
211
|
+
]
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
exports.pt.casual = function() {
|
|
216
|
+
var option = exports.pt({
|
|
217
|
+
strict: false
|
|
218
|
+
});
|
|
219
|
+
|
|
220
|
+
option.parsers.unshift(new parser.PTCasualDateParser());
|
|
221
|
+
option.parsers.unshift(new parser.PTWeekdayParser());
|
|
222
|
+
return option;
|
|
223
|
+
};
|
|
194
224
|
|
|
195
225
|
// -------------------------------------------------------------
|
|
196
226
|
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
var moment = require('moment');
|
|
1
|
+
var dayjs = require('dayjs');
|
|
7
2
|
var Parser = require('../parser').Parser;
|
|
8
3
|
var ParsedResult = require('../../result').ParsedResult;
|
|
9
4
|
|
|
@@ -25,43 +20,45 @@ exports.Parser = function DECasualDateParser() {
|
|
|
25
20
|
this.pattern = function() { return PATTERN; }
|
|
26
21
|
|
|
27
22
|
this.extract = function(text, ref, match, opt) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
text = match[0].substr(match[1].length);
|
|
24
|
+
|
|
25
|
+
const index = match.index + match[1].length;
|
|
26
|
+
const result = new ParsedResult({
|
|
31
27
|
index: index,
|
|
32
28
|
text: text,
|
|
33
29
|
ref: ref,
|
|
34
30
|
});
|
|
35
31
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
32
|
+
const refMoment = dayjs(ref);
|
|
33
|
+
const lowerText = text.toLowerCase();
|
|
34
|
+
|
|
35
|
+
var startMoment = refMoment;
|
|
39
36
|
|
|
40
37
|
if (/(?:heute|diese)\s*nacht/.test(lowerText)) {
|
|
41
38
|
// Normally means this coming midnight
|
|
42
39
|
result.start.imply('hour', 22);
|
|
43
40
|
result.start.imply('meridiem', 1);
|
|
44
41
|
} else if (/^(?:ü|ue)bermorgen/.test(lowerText)) {
|
|
45
|
-
startMoment.add(refMoment.hour() > 1 ? 2 : 1, 'day');
|
|
42
|
+
startMoment = startMoment.add(refMoment.hour() > 1 ? 2 : 1, 'day');
|
|
46
43
|
} else if (/^morgen/.test(lowerText)) {
|
|
47
44
|
// Check not "Tomorrow" on late night
|
|
48
45
|
if (refMoment.hour() > 1) {
|
|
49
|
-
startMoment.add(1, 'day');
|
|
46
|
+
startMoment = startMoment.add(1, 'day');
|
|
50
47
|
}
|
|
51
48
|
} else if (/^gestern/.test(lowerText)) {
|
|
52
|
-
startMoment.add(-1, 'day');
|
|
49
|
+
startMoment = startMoment.add(-1, 'day');
|
|
53
50
|
} else if (/^vorgestern/.test(lowerText)) {
|
|
54
|
-
startMoment.add(-2, 'day');
|
|
51
|
+
startMoment = startMoment.add(-2, 'day');
|
|
55
52
|
} else if (/letzte\s*nacht/.test(lowerText)) {
|
|
56
53
|
result.start.imply('hour', 0);
|
|
57
54
|
if (refMoment.hour() > 6) {
|
|
58
|
-
startMoment.add(-1, 'day');
|
|
55
|
+
startMoment = startMoment.add(-1, 'day');
|
|
59
56
|
}
|
|
60
57
|
} else if (lowerText === 'jetzt') {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
58
|
+
result.start.imply('hour', refMoment.hour());
|
|
59
|
+
result.start.imply('minute', refMoment.minute());
|
|
60
|
+
result.start.imply('second', refMoment.second());
|
|
61
|
+
result.start.imply('millisecond', refMoment.millisecond());
|
|
65
62
|
}
|
|
66
63
|
|
|
67
64
|
var secondMatch = match[3] || match[4] || match[5];
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
var
|
|
6
|
+
var dayjs = require('dayjs');
|
|
7
7
|
var Parser = require('../parser').Parser;
|
|
8
8
|
var ParsedResult = require('../../result').ParsedResult;
|
|
9
9
|
var util = require('../../utils/DE');
|
|
@@ -54,17 +54,17 @@ exports.Parser = function DEDeadlineFormatParser(){
|
|
|
54
54
|
num = parseInt(num);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
-
var date =
|
|
57
|
+
var date = dayjs(ref);
|
|
58
58
|
if (/tag|woche|monat|jahr/i.test(match[4])) {
|
|
59
59
|
|
|
60
60
|
if (/tag/i.test(match[4])) {
|
|
61
|
-
date.add(num, 'd');
|
|
61
|
+
date = date.add(num, 'd');
|
|
62
62
|
} else if (/woche/i.test(match[4])) {
|
|
63
|
-
date.add(num * 7, 'd');
|
|
63
|
+
date = date.add(num * 7, 'd');
|
|
64
64
|
} else if (/monat/i.test(match[4])) {
|
|
65
|
-
date.add(num, 'month');
|
|
65
|
+
date = date.add(num, 'month');
|
|
66
66
|
} else if (/jahr/i.test(match[4])) {
|
|
67
|
-
date.add(num, 'year');
|
|
67
|
+
date = date.add(num, 'year');
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
result.start.assign('year', date.year());
|
|
@@ -75,15 +75,15 @@ exports.Parser = function DEDeadlineFormatParser(){
|
|
|
75
75
|
|
|
76
76
|
if (/stunde/i.test(match[4])) {
|
|
77
77
|
|
|
78
|
-
date.add(num, 'hour');
|
|
78
|
+
date = date.add(num, 'hour');
|
|
79
79
|
|
|
80
80
|
} else if (/min/i.test(match[4])) {
|
|
81
81
|
|
|
82
|
-
date.add(num, 'minute');
|
|
82
|
+
date = date.add(num, 'minute');
|
|
83
83
|
|
|
84
84
|
} else if (/sekunde/i.test(match[4])) {
|
|
85
85
|
|
|
86
|
-
date.add(num, 'second');
|
|
86
|
+
date = date.add(num, 'second');
|
|
87
87
|
}
|
|
88
88
|
|
|
89
89
|
result.start.imply('year', date.year());
|
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
const dayjs = require('dayjs');
|
|
2
|
+
const parser = require('../parser');
|
|
3
|
+
const ParsedResult = require('../../result').ParsedResult;
|
|
4
|
+
const util = require('../../utils/DE');
|
|
2
5
|
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
var moment = require('moment');
|
|
7
|
-
|
|
8
|
-
var Parser = require('../parser').Parser;
|
|
9
|
-
var ParsedResult = require('../../result').ParsedResult;
|
|
10
|
-
var util = require('../../utils/DE');
|
|
11
|
-
|
|
12
|
-
var PATTERN = new RegExp('(\\W|^)' +
|
|
6
|
+
const PATTERN = new RegExp('(\\W|^)' +
|
|
13
7
|
'(?:am\\s*?)?' +
|
|
14
8
|
'(?:(Sonntag|Montag|Dienstag|Mittwoch|Donnerstag|Freitag|Samstag|So|Mo|Di|Mi|Do|Fr|Sa)\\s*,?\\s*)?' +
|
|
15
9
|
'(?:den\\s*)?' +
|
|
@@ -23,21 +17,21 @@ var PATTERN = new RegExp('(\\W|^)' +
|
|
|
23
17
|
'(?=\\W|$)', 'i'
|
|
24
18
|
);
|
|
25
19
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
const WEEKDAY_GROUP = 2;
|
|
21
|
+
const DATE_GROUP = 3;
|
|
22
|
+
const DATE_TO_GROUP = 4;
|
|
23
|
+
const MONTH_NAME_GROUP = 5;
|
|
24
|
+
const YEAR_GROUP = 6;
|
|
25
|
+
const YEAR_BE_GROUP = 7;
|
|
32
26
|
|
|
33
27
|
exports.Parser = function DEMonthNameLittleEndianParser(){
|
|
34
|
-
Parser.apply(this, arguments);
|
|
28
|
+
parser.Parser.apply(this, arguments);
|
|
35
29
|
|
|
36
30
|
this.pattern = function() { return PATTERN; }
|
|
37
31
|
|
|
38
32
|
this.extract = function(text, ref, match, opt){
|
|
39
33
|
|
|
40
|
-
|
|
34
|
+
const result = new ParsedResult({
|
|
41
35
|
text: match[0].substr(match[1].length, match[0].length - match[1].length),
|
|
42
36
|
index: match.index + match[1].length,
|
|
43
37
|
ref: ref,
|
|
@@ -70,25 +64,10 @@ exports.Parser = function DEMonthNameLittleEndianParser(){
|
|
|
70
64
|
result.start.assign('month', month);
|
|
71
65
|
result.start.assign('year', year);
|
|
72
66
|
} else {
|
|
73
|
-
|
|
74
|
-
//Find the most appropriated year
|
|
75
|
-
var refMoment = moment(ref);
|
|
76
|
-
refMoment.month(month - 1);
|
|
77
|
-
refMoment.date(day);
|
|
78
|
-
refMoment.year(moment(ref).year());
|
|
79
|
-
|
|
80
|
-
var nextYear = refMoment.clone().add(1, 'y');
|
|
81
|
-
var lastYear = refMoment.clone().add(-1, 'y');
|
|
82
|
-
if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
|
|
83
|
-
refMoment = nextYear;
|
|
84
|
-
}
|
|
85
|
-
else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
|
|
86
|
-
refMoment = lastYear;
|
|
87
|
-
}
|
|
88
|
-
|
|
67
|
+
year = parser.findYearClosestToRef(ref, day, month);
|
|
89
68
|
result.start.assign('day', day);
|
|
90
69
|
result.start.assign('month', month);
|
|
91
|
-
result.start.imply('year',
|
|
70
|
+
result.start.imply('year', year);
|
|
92
71
|
}
|
|
93
72
|
|
|
94
73
|
// Weekday component
|
|
@@ -7,13 +7,11 @@
|
|
|
7
7
|
- Januar 2012
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
const parser = require('../parser');
|
|
11
|
+
const ParsedResult = require('../../result').ParsedResult;
|
|
12
|
+
const util = require('../../utils/DE');
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
var ParsedResult = require('../../result').ParsedResult;
|
|
14
|
-
var util = require('../../utils/DE');
|
|
15
|
-
|
|
16
|
-
var PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
|
|
14
|
+
const PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
|
|
17
15
|
'(Jan\\.?|Januar|Feb\\.?|Februar|Mär\\.?|M(?:ä|ae)rz|Mrz\\.?|Apr\\.?|April|Mai\\.?|Jun\\.?|Juni|Jul\\.?|Juli|Aug\\.?|August|Sep\\.?|Sept\\.?|September|Okt\\.?|Oktober|Nov\\.?|November|Dez\\.?|Dezember)' +
|
|
18
16
|
'\\s*' +
|
|
19
17
|
'(?:' +
|
|
@@ -21,14 +19,14 @@ var PATTERN = new RegExp('(^|\\D\\s+|[^\\w\\s])' +
|
|
|
21
19
|
')?' +
|
|
22
20
|
'(?=[^\\s\\w]|$)', 'i');
|
|
23
21
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
22
|
+
const MONTH_NAME_GROUP = 2;
|
|
23
|
+
const YEAR_GROUP = 3;
|
|
24
|
+
const YEAR_BE_GROUP = 4;
|
|
25
|
+
const YEAR_GROUP2 = 5;
|
|
26
|
+
const YEAR_BE_GROUP2 = 6;
|
|
29
27
|
|
|
30
28
|
exports.Parser = function ENMonthNameParser(){
|
|
31
|
-
Parser.apply(this, arguments);
|
|
29
|
+
parser.Parser.apply(this, arguments);
|
|
32
30
|
|
|
33
31
|
this.pattern = function() { return PATTERN; }
|
|
34
32
|
|
|
@@ -68,23 +66,10 @@ exports.Parser = function ENMonthNameParser(){
|
|
|
68
66
|
result.start.assign('year', year);
|
|
69
67
|
} else {
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
var refMoment = moment(ref);
|
|
73
|
-
refMoment.month(month - 1);
|
|
74
|
-
refMoment.date(day);
|
|
75
|
-
|
|
76
|
-
var nextYear = refMoment.clone().add(1, 'y');
|
|
77
|
-
var lastYear = refMoment.clone().add(-1, 'y');
|
|
78
|
-
if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
|
|
79
|
-
refMoment = nextYear;
|
|
80
|
-
}
|
|
81
|
-
else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
|
|
82
|
-
refMoment = lastYear;
|
|
83
|
-
}
|
|
84
|
-
|
|
69
|
+
year = parser.findYearClosestToRef(ref, day, month);
|
|
85
70
|
result.start.imply('day', day);
|
|
86
71
|
result.start.assign('month', month);
|
|
87
|
-
result.start.imply('year',
|
|
72
|
+
result.start.imply('year', year);
|
|
88
73
|
}
|
|
89
74
|
|
|
90
75
|
result.tags['DEMonthNameParser'] = true;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
- 11/3/2015
|
|
5
5
|
- 11/3
|
|
6
6
|
*/
|
|
7
|
-
var
|
|
7
|
+
var dayjs = require('dayjs');
|
|
8
8
|
var Parser = require('../parser').Parser;
|
|
9
9
|
var ParsedResult = require('../../result').ParsedResult;
|
|
10
10
|
|
|
@@ -72,8 +72,7 @@ exports.Parser = function DESlashDateFormatParser(argument) {
|
|
|
72
72
|
// MM.dd -> NG
|
|
73
73
|
if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;
|
|
74
74
|
|
|
75
|
-
var
|
|
76
|
-
var year = match[YEAR_GROUP] || moment(ref).year() + '';
|
|
75
|
+
var year = match[YEAR_GROUP] || dayjs(ref).year() + '';
|
|
77
76
|
var month = match[MONTH_GROUP];
|
|
78
77
|
var day = match[DAY_GROUP];
|
|
79
78
|
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
var moment = require('moment');
|
|
1
|
+
const dayjs = require('dayjs');
|
|
7
2
|
var Parser = require('../parser').Parser;
|
|
8
3
|
var ParsedResult = require('../../result').ParsedResult;
|
|
9
4
|
var util = require('../../utils/DE');
|
|
@@ -54,20 +49,20 @@ exports.Parser = function DETimeAgoFormatParser(){
|
|
|
54
49
|
num = parseInt(num);
|
|
55
50
|
}
|
|
56
51
|
|
|
57
|
-
var date =
|
|
52
|
+
var date = dayjs(ref);
|
|
58
53
|
|
|
59
54
|
if (/stunde|min|sekunde/i.test(match[3])) {
|
|
60
55
|
if (/stunde/i.test(match[3])) {
|
|
61
56
|
|
|
62
|
-
date.add(-num, 'hour');
|
|
57
|
+
date = date.add(-num, 'hour');
|
|
63
58
|
|
|
64
59
|
} else if (/min/i.test(match[3])) {
|
|
65
60
|
|
|
66
|
-
date.add(-num, 'minute');
|
|
61
|
+
date = date.add(-num, 'minute');
|
|
67
62
|
|
|
68
63
|
} else if (/sekunde/i.test(match[3])) {
|
|
69
64
|
|
|
70
|
-
date.add(-num, 'second');
|
|
65
|
+
date = date.add(-num, 'second');
|
|
71
66
|
}
|
|
72
67
|
|
|
73
68
|
result.start.imply('day', date.date());
|
|
@@ -81,7 +76,7 @@ exports.Parser = function DETimeAgoFormatParser(){
|
|
|
81
76
|
}
|
|
82
77
|
|
|
83
78
|
if (/woche/i.test(match[3])) {
|
|
84
|
-
date.add(-num, 'week');
|
|
79
|
+
date = date.add(-num, 'week');
|
|
85
80
|
|
|
86
81
|
result.start.imply('day', date.date());
|
|
87
82
|
result.start.imply('month', date.month() + 1);
|
|
@@ -91,16 +86,16 @@ exports.Parser = function DETimeAgoFormatParser(){
|
|
|
91
86
|
}
|
|
92
87
|
|
|
93
88
|
if (/tag/i.test(match[3])) {
|
|
94
|
-
date.add(-num, 'd');
|
|
89
|
+
date = date.add(-num, 'd');
|
|
95
90
|
}
|
|
96
91
|
|
|
97
92
|
if (/monat/i.test(match[3])) {
|
|
98
|
-
date.add(-num, 'month');
|
|
93
|
+
date = date.add(-num, 'month');
|
|
99
94
|
}
|
|
100
95
|
|
|
101
96
|
if (/jahr/i.test(match[3])) {
|
|
102
97
|
|
|
103
|
-
date.add(-num, 'year');
|
|
98
|
+
date = date.add(-num, 'year');
|
|
104
99
|
}
|
|
105
100
|
|
|
106
101
|
result.start.assign('day', date.date());
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
const dayjs = require('dayjs');
|
|
7
7
|
var Parser = require('../parser').Parser;
|
|
8
8
|
var ParsedResult = require('../../result').ParsedResult;
|
|
9
9
|
var ParsedComponents = require('../../result').ParsedComponents;
|
|
@@ -49,7 +49,7 @@ exports.Parser = function DETimeExpressionParser() {
|
|
|
49
49
|
|
|
50
50
|
// This pattern can be overlaped Ex. [12] AM, 1[2] AM
|
|
51
51
|
if (match.index > 0 && text[match.index-1].match(/\w/)) return null;
|
|
52
|
-
var refMoment =
|
|
52
|
+
var refMoment = dayjs(ref);
|
|
53
53
|
var result = new ParsedResult();
|
|
54
54
|
result.ref = ref;
|
|
55
55
|
result.index = match.index + match[1].length;
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
*/
|
|
5
|
-
|
|
5
|
+
const dayjs = require('dayjs');
|
|
6
6
|
var Parser = require('../parser').Parser;
|
|
7
7
|
var ParsedResult = require('../../result').ParsedResult;
|
|
8
8
|
|
|
@@ -47,7 +47,7 @@ exports.Parser = function DEWeekdayParser() {
|
|
|
47
47
|
var offset = DAYS_OFFSET[dayOfWeek];
|
|
48
48
|
if(offset === undefined) return null;
|
|
49
49
|
|
|
50
|
-
var startMoment =
|
|
50
|
+
var startMoment = dayjs(ref);
|
|
51
51
|
var prefix = match[PREFIX_GROUP];
|
|
52
52
|
var postfix = match[POSTFIX_GROUP];
|
|
53
53
|
|
|
@@ -56,24 +56,24 @@ exports.Parser = function DEWeekdayParser() {
|
|
|
56
56
|
norm = norm || '';
|
|
57
57
|
norm = norm.toLowerCase();
|
|
58
58
|
if (/letzte/.test(norm)) {
|
|
59
|
-
startMoment.day(offset - 7);
|
|
59
|
+
startMoment = startMoment.day(offset - 7);
|
|
60
60
|
} else if (/n(?:ä|ae)chste/.test(norm)) {
|
|
61
|
-
startMoment.day(offset + 7);
|
|
61
|
+
startMoment = startMoment.day(offset + 7);
|
|
62
62
|
} else if (/diese/.test(norm)) {
|
|
63
|
-
if ( opt.
|
|
64
|
-
startMoment.day(offset + 7);
|
|
63
|
+
if ( opt.forwardDate && refOffset > offset ) {
|
|
64
|
+
startMoment = startMoment.day(offset + 7);
|
|
65
65
|
} else {
|
|
66
|
-
startMoment.day(offset);
|
|
66
|
+
startMoment = startMoment.day(offset);
|
|
67
67
|
}
|
|
68
68
|
} else {
|
|
69
|
-
if ( opt.
|
|
70
|
-
startMoment.day(offset + 7);
|
|
71
|
-
} else if (!opt.
|
|
72
|
-
startMoment.day(offset - 7);
|
|
73
|
-
} else if (!opt.
|
|
74
|
-
startMoment.day(offset + 7);
|
|
69
|
+
if ( opt.forwardDate && refOffset > offset ) {
|
|
70
|
+
startMoment = startMoment.day(offset + 7);
|
|
71
|
+
} else if (!opt.forwardDate && Math.abs(offset - 7 - refOffset) < Math.abs(offset - refOffset)) {
|
|
72
|
+
startMoment = startMoment.day(offset - 7);
|
|
73
|
+
} else if (!opt.forwardDate && Math.abs(offset + 7 - refOffset) < Math.abs(offset - refOffset)) {
|
|
74
|
+
startMoment = startMoment.day(offset + 7);
|
|
75
75
|
} else {
|
|
76
|
-
startMoment.day(offset);
|
|
76
|
+
startMoment = startMoment.day(offset);
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
var moment = require('moment');
|
|
1
|
+
const dayjs = require('dayjs');
|
|
7
2
|
var Parser = require('../parser').Parser;
|
|
8
3
|
var ParsedResult = require('../../result').ParsedResult;
|
|
9
4
|
|
|
@@ -25,8 +20,8 @@ exports.Parser = function ENCasualDateParser(){
|
|
|
25
20
|
ref: ref,
|
|
26
21
|
});
|
|
27
22
|
|
|
28
|
-
var refMoment =
|
|
29
|
-
var startMoment = refMoment
|
|
23
|
+
var refMoment = dayjs(ref);
|
|
24
|
+
var startMoment = refMoment;
|
|
30
25
|
var lowerText = text.toLowerCase();
|
|
31
26
|
|
|
32
27
|
if(lowerText == 'tonight'){
|
|
@@ -38,18 +33,18 @@ exports.Parser = function ENCasualDateParser(){
|
|
|
38
33
|
|
|
39
34
|
// Check not "Tomorrow" on late night
|
|
40
35
|
if(refMoment.hour() > 1) {
|
|
41
|
-
startMoment.add(1, 'day');
|
|
36
|
+
startMoment = startMoment.add(1, 'day');
|
|
42
37
|
}
|
|
43
38
|
|
|
44
39
|
} else if (/^yesterday/.test(lowerText)) {
|
|
45
40
|
|
|
46
|
-
startMoment.add(-1, 'day');
|
|
41
|
+
startMoment = startMoment.add(-1, 'day');
|
|
47
42
|
|
|
48
43
|
} else if(lowerText.match(/last\s*night/)) {
|
|
49
44
|
|
|
50
45
|
result.start.imply('hour', 0);
|
|
51
46
|
if (refMoment.hour() > 6) {
|
|
52
|
-
startMoment.add(-1, 'day');
|
|
47
|
+
startMoment = startMoment.add(-1, 'day');
|
|
53
48
|
}
|
|
54
49
|
|
|
55
50
|
} else if (lowerText.match("now")) {
|