chrono-node 1.3.2 → 1.3.11

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.
Files changed (167) hide show
  1. package/README.md +108 -67
  2. package/bower.json +1 -1
  3. package/chrono.js +1340 -1003
  4. package/chrono.map.json +1 -1
  5. package/chrono.min.js +108 -106
  6. package/package.json +11 -15
  7. package/src/chrono.js +2 -3
  8. package/src/options.js +3 -2
  9. package/src/parsers/{DE → de}/DECasualDateParser.js +0 -0
  10. package/src/parsers/{DE → de}/DEDeadlineFormatParser.js +0 -0
  11. package/src/parsers/{DE → de}/DEMonthNameLittleEndianParser.js +0 -0
  12. package/src/parsers/{DE → de}/DEMonthNameParser.js +0 -0
  13. package/src/parsers/{DE → de}/DESlashDateFormatParser.js +0 -0
  14. package/src/parsers/{DE → de}/DETimeAgoFormatParser.js +0 -0
  15. package/src/parsers/{DE → de}/DETimeExpressionParser.js +0 -0
  16. package/src/parsers/{DE → de}/DEWeekdayParser.js +4 -4
  17. package/src/parsers/{EN → en}/ENCasualDateParser.js +4 -4
  18. package/src/parsers/en/ENCasualTimeParser.js +60 -0
  19. package/src/parsers/{EN → en}/ENDeadlineFormatParser.js +6 -6
  20. package/src/parsers/{EN → en}/ENISOFormatParser.js +0 -0
  21. package/src/parsers/{EN → en}/ENMonthNameLittleEndianParser.js +24 -24
  22. package/src/parsers/{EN → en}/ENMonthNameMiddleEndianParser.js +5 -4
  23. package/src/parsers/{EN → en}/ENMonthNameParser.js +1 -1
  24. package/src/parsers/{EN → en}/ENRelativeDateFormatParser.js +40 -2
  25. package/src/parsers/{EN → en}/ENSlashDateFormatParser.js +5 -1
  26. package/src/parsers/{EN → en}/ENSlashDateFormatStartWithYearParser.js +8 -2
  27. package/src/parsers/{EN → en}/ENSlashMonthFormatParser.js +0 -0
  28. package/src/parsers/en/ENTimeAgoFormatParser.js +69 -0
  29. package/src/parsers/{EN → en}/ENTimeExpressionParser.js +24 -11
  30. package/src/parsers/en/ENTimeLaterFormatParser.js +77 -0
  31. package/src/parsers/{EN → en}/ENWeekdayParser.js +0 -0
  32. package/src/parsers/{ES → es}/ESCasualDateParser.js +0 -0
  33. package/src/parsers/{ES → es}/ESDeadlineFormatParser.js +0 -0
  34. package/src/parsers/{ES → es}/ESMonthNameLittleEndianParser.js +2 -2
  35. package/src/parsers/{ES → es}/ESSlashDateFormatParser.js +0 -0
  36. package/src/parsers/{ES → es}/ESTimeAgoFormatParser.js +0 -0
  37. package/src/parsers/{ES → es}/ESTimeExpressionParser.js +0 -0
  38. package/src/parsers/{ES → es}/ESWeekdayParser.js +1 -1
  39. package/src/parsers/{FR → fr}/FRCasualDateParser.js +0 -0
  40. package/src/parsers/{FR → fr}/FRDeadlineFormatParser.js +0 -0
  41. package/src/parsers/{FR → fr}/FRMonthNameLittleEndianParser.js +0 -0
  42. package/src/parsers/{FR → fr}/FRRelativeDateFormatParser.js +5 -1
  43. package/src/parsers/{FR → fr}/FRSlashDateFormatParser.js +41 -11
  44. package/src/parsers/{FR → fr}/FRTimeAgoFormatParser.js +0 -0
  45. package/src/parsers/{FR → fr}/FRTimeExpressionParser.js +0 -0
  46. package/src/parsers/{FR → fr}/FRWeekdayParser.js +1 -1
  47. package/src/parsers/{JP → ja}/JPCasualDateParser.js +0 -0
  48. package/src/parsers/{JP → ja}/JPStandardParser.js +0 -0
  49. package/src/parsers/parser.js +50 -49
  50. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantCasualDateParser.js +18 -2
  51. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDateParser.js +0 -0
  52. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantDeadlineFormatParser.js +0 -0
  53. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantTimeExpressionParser.js +36 -4
  54. package/src/parsers/{ZH-Hant → zh-Hant}/ZHHantWeekdayParser.js +1 -1
  55. package/src/refiners/ExtractTimezoneAbbrRefiner.js +19 -10
  56. package/src/refiners/ForwardDateRefiner.js +1 -1
  57. package/src/refiners/{DE → de}/DEMergeDateRangeRefiner.js +1 -1
  58. package/src/refiners/{DE → de}/DEMergeDateTimeRefiner.js +3 -3
  59. package/src/refiners/{EN → en}/ENMergeDateRangeRefiner.js +21 -3
  60. package/src/refiners/{EN → en}/ENMergeDateTimeRefiner.js +15 -2
  61. package/src/refiners/{EN → en}/ENMergeWeekdayRefiner.js +0 -0
  62. package/src/refiners/{EN → en}/ENPrioritizeSpecificDateRefiner.js +0 -0
  63. package/src/refiners/{FR → fr}/FRMergeDateRangeRefiner.js +0 -0
  64. package/src/refiners/{FR → fr}/FRMergeDateTimeRefiner.js +1 -1
  65. package/src/refiners/{JP → ja}/JPMergeDateRangeRefiner.js +1 -1
  66. package/src/refiners/refiner.js +12 -12
  67. package/src/result.js +3 -1
  68. package/src/timezone.js +2 -0
  69. package/src/utils/EN.js +68 -2
  70. package/test/de/de.test.js +51 -0
  71. package/test/de/de_casual.test.js +432 -0
  72. package/test/de/de_dash.test.js +6 -0
  73. package/test/de/de_deadline.test.js +244 -0
  74. package/test/de/de_little_endian.test.js +459 -0
  75. package/test/de/de_time_ago.test.js +313 -0
  76. package/test/de/de_time_exp.test.js +166 -0
  77. package/test/de/de_weekday.test.js +235 -0
  78. package/test/en/en.test.js +250 -0
  79. package/test/en/en_casual.test.js +461 -0
  80. package/test/en/en_dash.test.js +31 -0
  81. package/test/en/en_deadline.test.js +366 -0
  82. package/test/{test_example.js → en/en_example.test.js} +7 -18
  83. package/test/en/en_inter_std.test.js +269 -0
  84. package/test/en/en_little_endian.test.js +566 -0
  85. package/test/en/en_middle_endian.test.js +552 -0
  86. package/test/en/en_month.test.js +113 -0
  87. package/test/en/en_option_forward.test.js +156 -0
  88. package/test/en/en_relative.test.js +228 -0
  89. package/test/en/en_slash.test.js +450 -0
  90. package/test/en/en_time_ago.test.js +374 -0
  91. package/test/en/en_time_exp.test.js +722 -0
  92. package/test/en/en_time_from_now.test.js +371 -0
  93. package/test/en/en_time_later.test.js +95 -0
  94. package/test/en/en_weekday.test.js +301 -0
  95. package/test/es/es_casual.test.js +258 -0
  96. package/test/es/es_dash.test.js +13 -0
  97. package/test/es/es_deadline.test.js +85 -0
  98. package/test/es/es_little_endian.test.js +350 -0
  99. package/test/es/es_slash.test.js +24 -0
  100. package/test/es/es_time_ago.test.js +137 -0
  101. package/test/es/es_time_exp.test.js +240 -0
  102. package/test/fr/fr_casual.test.js +454 -0
  103. package/test/fr/fr_dash.test.js +26 -0
  104. package/test/fr/fr_deadline.test.js +244 -0
  105. package/test/fr/fr_little_endian.test.js +576 -0
  106. package/test/fr/fr_relative.test.js +198 -0
  107. package/test/fr/fr_slash.test.js +62 -0
  108. package/test/fr/fr_time_ago.test.js +194 -0
  109. package/test/fr/fr_time_exp.test.js +960 -0
  110. package/test/fr/fr_weekday.test.js +200 -0
  111. package/test/ja/ja_casual.test.js +51 -0
  112. package/test/ja/ja_standard.test.js +170 -0
  113. package/test/system.test.js +207 -0
  114. package/test/zh/zh_hant_casual.test.js +340 -0
  115. package/test/zh/zh_hant_date.test.js +118 -0
  116. package/test/zh/zh_hant_deadline.test.js +213 -0
  117. package/test/zh/zh_hant_time_exp.test.js +226 -0
  118. package/test/zh/zh_hant_weekday.test.js +160 -0
  119. package/.npmignore +0 -11
  120. package/src/parsers/EN/ENCasualTimeParser.js +0 -53
  121. package/src/parsers/EN/ENTimeAgoFormatParser.js +0 -114
  122. package/test/test_de.js +0 -62
  123. package/test/test_de_casual.js +0 -443
  124. package/test/test_de_dash.js +0 -17
  125. package/test/test_de_deadline.js +0 -255
  126. package/test/test_de_little_endian.js +0 -470
  127. package/test/test_de_time_ago.js +0 -324
  128. package/test/test_de_time_exp.js +0 -177
  129. package/test/test_de_weekday.js +0 -246
  130. package/test/test_en.js +0 -217
  131. package/test/test_en_casual.js +0 -448
  132. package/test/test_en_dash.js +0 -42
  133. package/test/test_en_deadline.js +0 -311
  134. package/test/test_en_inter_std.js +0 -272
  135. package/test/test_en_little_endian.js +0 -505
  136. package/test/test_en_middle_endian.js +0 -524
  137. package/test/test_en_month.js +0 -124
  138. package/test/test_en_option_forward.js +0 -167
  139. package/test/test_en_relative.js +0 -206
  140. package/test/test_en_slash.js +0 -370
  141. package/test/test_en_time_ago.js +0 -356
  142. package/test/test_en_time_exp.js +0 -663
  143. package/test/test_en_weekday.js +0 -312
  144. package/test/test_es_casual.js +0 -269
  145. package/test/test_es_dash.js +0 -24
  146. package/test/test_es_deadline.js +0 -96
  147. package/test/test_es_little_endian.js +0 -361
  148. package/test/test_es_slash.js +0 -35
  149. package/test/test_es_time_ago.js +0 -148
  150. package/test/test_es_time_exp.js +0 -251
  151. package/test/test_fr_casual.js +0 -465
  152. package/test/test_fr_dash.js +0 -37
  153. package/test/test_fr_deadline.js +0 -255
  154. package/test/test_fr_little_endian.js +0 -568
  155. package/test/test_fr_relative.js +0 -209
  156. package/test/test_fr_slash.js +0 -54
  157. package/test/test_fr_time_ago.js +0 -205
  158. package/test/test_fr_time_exp.js +0 -971
  159. package/test/test_fr_weekday.js +0 -211
  160. package/test/test_jp_casual.js +0 -62
  161. package/test/test_jp_standard.js +0 -181
  162. package/test/test_system.js +0 -178
  163. package/test/test_zh_hant_casual.js +0 -329
  164. package/test/test_zh_hant_date.js +0 -129
  165. package/test/test_zh_hant_deadline.js +0 -224
  166. package/test/test_zh_hant_time_exp.js +0 -210
  167. package/test/test_zh_hant_weekday.js +0 -171
@@ -0,0 +1,77 @@
1
+ var moment = require('moment');
2
+ var Parser = require('../parser').Parser;
3
+ var ParsedResult = require('../../result').ParsedResult;
4
+ var util = require('../../utils/EN');
5
+
6
+ var PATTERN = new RegExp('' +
7
+ /*match[1]*/ '(\\W|^)' +
8
+ /*match[2]*/ '(in )?' +
9
+ /*match[3]*/ '(' + util.TIME_UNIT_PATTERN + ')' +
10
+ /*match[4]*/ '(later|after|from now|henceforth|forward|out)?' +
11
+ /*match[5]*/ '(?=(?:\\W|$))',
12
+ 'i');
13
+
14
+ var STRICT_PATTERN = new RegExp('' +
15
+ /*match[1]*/ '(\\W|^)' +
16
+ /*match[2]*/ '(in )?' +
17
+ /*match[3]*/ '(' + util.TIME_UNIT_STRICT_PATTERN + ')' +
18
+ /*match[4]*/ '(later|from now)?' +
19
+ /*match[5]*/ '(?=(?:\\W|$))',
20
+ 'i');
21
+
22
+ exports.Parser = function ENTimeLaterFormatParser(){
23
+ Parser.apply(this, arguments);
24
+
25
+ this.pattern = function() {
26
+ return this.isStrictMode()? STRICT_PATTERN : PATTERN;
27
+ };
28
+
29
+ this.extract = function(text, ref, match, opt){
30
+ if (match.index > 0 && text[match.index-1].match(/\w/)) return null;
31
+
32
+ var prefix = match[2];
33
+ var suffix = match[4];
34
+ if (!prefix && !suffix) return null;
35
+
36
+ var preamble = match[1];
37
+
38
+ var text = match[0];
39
+ text = match[0].substr(preamble.length, match[0].length - preamble.length);
40
+ index = match.index + preamble.length;
41
+
42
+ var result = new ParsedResult({
43
+ index: index,
44
+ text: text,
45
+ ref: ref
46
+ });
47
+
48
+ var fragments = util.extractDateTimeUnitFragments(match[3]);
49
+ var date = moment(ref);
50
+ for (var key in fragments) {
51
+ date.add(fragments[key], key);
52
+ }
53
+
54
+ if (fragments['hour'] > 0 || fragments['minute'] > 0 || fragments['second'] > 0) {
55
+ result.start.assign('hour', date.hour());
56
+ result.start.assign('minute', date.minute());
57
+ result.start.assign('second', date.second());
58
+ result.tags['ENTimeAgoFormatParser'] = true;
59
+ }
60
+
61
+ if (fragments['d'] > 0 || fragments['month'] > 0 || fragments['year'] > 0) {
62
+ result.start.assign('day', date.date());
63
+ result.start.assign('month', date.month() + 1);
64
+ result.start.assign('year', date.year());
65
+ } else {
66
+ if (fragments['week'] > 0) {
67
+ result.start.imply('weekday', date.day());
68
+ }
69
+
70
+ result.start.imply('day', date.date());
71
+ result.start.imply('month', date.month() + 1);
72
+ result.start.imply('year', date.year());
73
+ }
74
+
75
+ return result;
76
+ };
77
+ }
File without changes
File without changes
File without changes
@@ -16,7 +16,7 @@ var PATTERN = new RegExp('(\\W|^)' +
16
16
  '(?:(Domingo|Lunes|Martes|Miércoles|Miercoles|Jueves|Viernes|Sábado|Sabado|Dom|Lun|Mar|Mie|Jue|Vie|Sab)\\s*,?\\s*)?' +
17
17
  '([0-9]{1,2})(?:º|ª|°)?' +
18
18
  '(?:\\s*(?:desde|de|\\-|\\–|al?|hasta|\\s)\\s*([0-9]{1,2})(?:º|ª|°)?)?\\s*(?:de)?\\s*' +
19
- '(Ene(?:ro|\\.)?|Feb(?:rero|\\.)?|Mar(?:zo|\\.)?|Abr(?:il|\\.)?|May(?:o|\\.)?|Jun(?:io|\\.)?|Jul(?:io|\\.)?|Ago(?:sto|\\.)?|Sep(?:tiembre|\\.)?|Oct(?:ubre|\\.)?|Nov(?:iembre|\\.)?|Dic(?:iembre|\\.)?)' +
19
+ '(Ene(?:ro|\\.)?|Feb(?:rero|\\.)?|Mar(?:zo|\\.)?|Abr(?:il|\\.)?|May(?:o|\\.)?|Jun(?:io|\\.)?|Jul(?:io|\\.)?|Ago(?:sto|\\.)?|Sep(?:tiembre|\\.)?|Set(?:iembre|\\.)?|Oct(?:ubre|\\.)?|Nov(?:iembre|\\.)?|Dic(?:iembre|\\.)?)' +
20
20
  '(?:\\s*(?:del?)?(\\s*[0-9]{1,4}(?![^\\s]\\d))(\\s*[ad]\\.?\\s*c\\.?|a\\.?\\s*d\\.?)?)?' +
21
21
  '(?=\\W|$)', 'i'
22
22
  );
@@ -105,4 +105,4 @@ exports.Parser = function ESMonthNameLittleEndianParser(){
105
105
  result.tags['ESMonthNameLittleEndianParser'] = true;
106
106
  return result;
107
107
  };
108
- }
108
+ }
File without changes
File without changes
@@ -5,7 +5,7 @@
5
5
  var moment = require('moment');
6
6
  var Parser = require('../parser').Parser;
7
7
  var ParsedResult = require('../../result').ParsedResult;
8
- var updateParsedComponent = require('../EN/ENWeekdayParser').updateParsedComponent;
8
+ var updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;
9
9
 
10
10
  var DAYS_OFFSET = { 'domingo': 0, 'dom': 0, 'lunes': 1, 'lun': 1, 'martes': 2, 'mar':2, 'miercoles': 3, 'miércoles': 3, 'mie': 3,
11
11
  'jueves': 4, 'jue': 4, 'viernes': 5, 'vier': 5, 'sabado': 6, 'sábado': 6, 'sab': 6,}
File without changes
File without changes
@@ -8,8 +8,12 @@ var Parser = require('../parser').Parser;
8
8
  var ParsedResult = require('../../result').ParsedResult;
9
9
  var util = require('../../utils/FR');
10
10
 
11
- // Load fr localization data from moment
11
+ // Force load fr localization data from moment for the locale files to be linkded durning browserify.
12
+ // NOTE: The function moment.defineLocale() also has a side effect that it change global locale
13
+ // We also need to save and restore the previous locale (see. moment.js, loadLocale)
14
+ var originalLocale = moment.locale();
12
15
  require('moment/locale/fr');
16
+ moment.locale(originalLocale);
13
17
 
14
18
  var PATTERN = new RegExp('(\\W|^)' +
15
19
  '(?:les?|la|l\'|du|des?)\\s*' +
@@ -32,6 +32,7 @@ var WEEKDAY_GROUP = 2;
32
32
  var DAY_GROUP = 3;
33
33
  var MONTH_GROUP = 4;
34
34
  var YEAR_GROUP = 5;
35
+ var YEAR_BE_GROUP = 6;
35
36
 
36
37
  exports.Parser = function FRSlashDateFormatParser(argument) {
37
38
  Parser.apply(this, arguments);
@@ -65,13 +66,27 @@ exports.Parser = function FRSlashDateFormatParser(argument) {
65
66
  if(!match[YEAR_GROUP] && match[0].indexOf('/') < 0) return;
66
67
 
67
68
  var date = null;
68
- var year = match[YEAR_GROUP] || moment(ref).year() + '';
69
69
  var month = match[MONTH_GROUP];
70
70
  var day = match[DAY_GROUP];
71
71
 
72
72
  day = parseInt(day);
73
73
  month = parseInt(month);
74
- year = parseInt(year);
74
+
75
+ var year = null;
76
+ if (match[YEAR_GROUP]) {
77
+ year = match[YEAR_GROUP];
78
+ year = parseInt(year);
79
+
80
+ if(match[YEAR_BE_GROUP]){
81
+ if (/a/i.test(match[YEAR_BE_GROUP])) {
82
+ // Ante Christe natum
83
+ year = -year;
84
+ }
85
+ } else if (year < 100){
86
+
87
+ year = year + 2000;
88
+ }
89
+ }
75
90
 
76
91
  if(month < 1 || month > 12) {
77
92
  if(month > 12) {
@@ -88,19 +103,34 @@ exports.Parser = function FRSlashDateFormatParser(argument) {
88
103
  }
89
104
  }
90
105
  }
106
+
91
107
  if(day < 1 || day > 31) return null;
92
108
 
93
- if(year < 100){
94
- if(year > 50){
95
- year = year + 1900;
96
- }else{
97
- year = year + 2000;
109
+ if(year){
110
+ result.start.assign('day', day);
111
+ result.start.assign('month', month);
112
+ result.start.assign('year', year);
113
+ } else {
114
+
115
+ // Find the most appropriated year
116
+ var refMoment = moment(ref);
117
+ refMoment.month(month - 1);
118
+ refMoment.date(day);
119
+ refMoment.year(moment(ref).year());
120
+
121
+ var nextYear = refMoment.clone().add(1, 'y');
122
+ var lastYear = refMoment.clone().add(-1, 'y');
123
+ if( Math.abs(nextYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
124
+ refMoment = nextYear;
125
+ }
126
+ else if( Math.abs(lastYear.diff(moment(ref))) < Math.abs(refMoment.diff(moment(ref))) ){
127
+ refMoment = lastYear;
98
128
  }
99
- }
100
129
 
101
- result.start.assign('day', day);
102
- result.start.assign('month', month);
103
- result.start.assign('year', year);
130
+ result.start.assign('day', day);
131
+ result.start.assign('month', month);
132
+ result.start.imply('year', refMoment.year());
133
+ }
104
134
 
105
135
  // Day of week
106
136
  if(match[WEEKDAY_GROUP]) {
File without changes
File without changes
@@ -5,7 +5,7 @@
5
5
  var moment = require('moment');
6
6
  var Parser = require('../parser').Parser;
7
7
  var ParsedResult = require('../../result').ParsedResult;
8
- var updateParsedComponent = require('../EN/ENWeekdayParser').updateParsedComponent;
8
+ var updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;
9
9
 
10
10
  var DAYS_OFFSET = { 'dimanche': 0, 'dim': 0, 'lundi': 1, 'lun': 1,'mardi': 2, 'mar':2, 'mercredi': 3, 'mer': 3,
11
11
  'jeudi': 4, 'jeu':4, 'vendredi': 5, 'ven': 5,'samedi': 6, 'sam': 6};
File without changes
File without changes
@@ -53,52 +53,53 @@ function Parser(config) {
53
53
 
54
54
  exports.Parser = Parser;
55
55
 
56
- exports.ENISOFormatParser = require('./EN/ENISOFormatParser').Parser;
57
- exports.ENDeadlineFormatParser = require('./EN/ENDeadlineFormatParser').Parser;
58
- exports.ENRelativeDateFormatParser = require('./EN/ENRelativeDateFormatParser').Parser;
59
- exports.ENMonthNameLittleEndianParser = require('./EN/ENMonthNameLittleEndianParser').Parser;
60
- exports.ENMonthNameMiddleEndianParser = require('./EN/ENMonthNameMiddleEndianParser').Parser;
61
- exports.ENMonthNameParser = require('./EN/ENMonthNameParser').Parser;
62
- exports.ENSlashDateFormatParser = require('./EN/ENSlashDateFormatParser').Parser;
63
- exports.ENSlashDateFormatStartWithYearParser = require('./EN/ENSlashDateFormatStartWithYearParser').Parser;
64
- exports.ENSlashMonthFormatParser = require('./EN/ENSlashMonthFormatParser').Parser;
65
- exports.ENTimeAgoFormatParser = require('./EN/ENTimeAgoFormatParser').Parser;
66
- exports.ENTimeExpressionParser = require('./EN/ENTimeExpressionParser').Parser;
67
- exports.ENWeekdayParser = require('./EN/ENWeekdayParser').Parser;
68
- exports.ENCasualDateParser = require('./EN/ENCasualDateParser').Parser;
69
- exports.ENCasualTimeParser = require('./EN/ENCasualTimeParser').Parser;
70
-
71
- exports.JPStandardParser = require('./JP/JPStandardParser').Parser;
72
- exports.JPCasualDateParser = require('./JP/JPCasualDateParser').Parser;
73
-
74
- exports.ESCasualDateParser = require('./ES/ESCasualDateParser').Parser;
75
- exports.ESDeadlineFormatParser = require('./ES/ESDeadlineFormatParser').Parser;
76
- exports.ESTimeAgoFormatParser = require('./ES/ESTimeAgoFormatParser').Parser;
77
- exports.ESTimeExpressionParser = require('./ES/ESTimeExpressionParser').Parser;
78
- exports.ESWeekdayParser = require('./ES/ESWeekdayParser').Parser;
79
- exports.ESMonthNameLittleEndianParser = require('./ES/ESMonthNameLittleEndianParser').Parser;
80
- exports.ESSlashDateFormatParser = require('./ES/ESSlashDateFormatParser').Parser;
81
-
82
- exports.FRCasualDateParser = require('./FR/FRCasualDateParser').Parser;
83
- exports.FRDeadlineFormatParser = require('./FR/FRDeadlineFormatParser').Parser;
84
- exports.FRMonthNameLittleEndianParser = require('./FR/FRMonthNameLittleEndianParser').Parser;
85
- exports.FRSlashDateFormatParser = require('./FR/FRSlashDateFormatParser').Parser;
86
- exports.FRTimeAgoFormatParser = require('./FR/FRTimeAgoFormatParser').Parser;
87
- exports.FRTimeExpressionParser = require('./FR/FRTimeExpressionParser').Parser;
88
- exports.FRWeekdayParser = require('./FR/FRWeekdayParser').Parser;
89
- exports.FRRelativeDateFormatParser = require('./FR/FRRelativeDateFormatParser').Parser;
90
-
91
- exports.ZHHantDateParser = require('./ZH-Hant/ZHHantDateParser').Parser;
92
- exports.ZHHantWeekdayParser = require('./ZH-Hant/ZHHantWeekdayParser').Parser;
93
- exports.ZHHantTimeExpressionParser = require('./ZH-Hant/ZHHantTimeExpressionParser').Parser;
94
- exports.ZHHantCasualDateParser = require('./ZH-Hant/ZHHantCasualDateParser').Parser;
95
- exports.ZHHantDeadlineFormatParser = require('./ZH-Hant/ZHHantDeadlineFormatParser').Parser;
96
-
97
- exports.DEDeadlineFormatParser = require('./DE/DEDeadlineFormatParser').Parser;
98
- exports.DEMonthNameLittleEndianParser = require('./DE/DEMonthNameLittleEndianParser').Parser;
99
- exports.DEMonthNameParser = require('./DE/DEMonthNameParser').Parser;
100
- exports.DESlashDateFormatParser = require('./DE/DESlashDateFormatParser').Parser;
101
- exports.DETimeAgoFormatParser = require('./DE/DETimeAgoFormatParser').Parser;
102
- exports.DETimeExpressionParser = require('./DE/DETimeExpressionParser').Parser;
103
- exports.DEWeekdayParser = require('./DE/DEWeekdayParser').Parser;
104
- exports.DECasualDateParser = require('./DE/DECasualDateParser').Parser;
56
+ exports.ENISOFormatParser = require('./en/ENISOFormatParser').Parser;
57
+ exports.ENDeadlineFormatParser = require('./en/ENDeadlineFormatParser').Parser;
58
+ exports.ENRelativeDateFormatParser = require('./en/ENRelativeDateFormatParser').Parser;
59
+ exports.ENMonthNameLittleEndianParser = require('./en/ENMonthNameLittleEndianParser').Parser;
60
+ exports.ENMonthNameMiddleEndianParser = require('./en/ENMonthNameMiddleEndianParser').Parser;
61
+ exports.ENMonthNameParser = require('./en/ENMonthNameParser').Parser;
62
+ exports.ENSlashDateFormatParser = require('./en/ENSlashDateFormatParser').Parser;
63
+ exports.ENSlashDateFormatStartWithYearParser = require('./en/ENSlashDateFormatStartWithYearParser').Parser;
64
+ exports.ENSlashMonthFormatParser = require('./en/ENSlashMonthFormatParser').Parser;
65
+ exports.ENTimeAgoFormatParser = require('./en/ENTimeAgoFormatParser').Parser;
66
+ exports.ENTimeExpressionParser = require('./en/ENTimeExpressionParser').Parser;
67
+ exports.ENTimeLaterFormatParser = require('./en/ENTimeLaterFormatParser').Parser;
68
+ exports.ENWeekdayParser = require('./en/ENWeekdayParser').Parser;
69
+ exports.ENCasualDateParser = require('./en/ENCasualDateParser').Parser;
70
+ exports.ENCasualTimeParser = require('./en/ENCasualTimeParser').Parser;
71
+
72
+ exports.JPStandardParser = require('./ja/JPStandardParser').Parser;
73
+ exports.JPCasualDateParser = require('./ja/JPCasualDateParser').Parser;
74
+
75
+ exports.ESCasualDateParser = require('./es/ESCasualDateParser').Parser;
76
+ exports.ESDeadlineFormatParser = require('./es/ESDeadlineFormatParser').Parser;
77
+ exports.ESTimeAgoFormatParser = require('./es/ESTimeAgoFormatParser').Parser;
78
+ exports.ESTimeExpressionParser = require('./es/ESTimeExpressionParser').Parser;
79
+ exports.ESWeekdayParser = require('./es/ESWeekdayParser').Parser;
80
+ exports.ESMonthNameLittleEndianParser = require('./es/ESMonthNameLittleEndianParser').Parser;
81
+ exports.ESSlashDateFormatParser = require('./es/ESSlashDateFormatParser').Parser;
82
+
83
+ exports.FRCasualDateParser = require('./fr/FRCasualDateParser').Parser;
84
+ exports.FRDeadlineFormatParser = require('./fr/FRDeadlineFormatParser').Parser;
85
+ exports.FRMonthNameLittleEndianParser = require('./fr/FRMonthNameLittleEndianParser').Parser;
86
+ exports.FRSlashDateFormatParser = require('./fr/FRSlashDateFormatParser').Parser;
87
+ exports.FRTimeAgoFormatParser = require('./fr/FRTimeAgoFormatParser').Parser;
88
+ exports.FRTimeExpressionParser = require('./fr/FRTimeExpressionParser').Parser;
89
+ exports.FRWeekdayParser = require('./fr/FRWeekdayParser').Parser;
90
+ exports.FRRelativeDateFormatParser = require('./fr/FRRelativeDateFormatParser').Parser;
91
+
92
+ exports.ZHHantDateParser = require('./zh-Hant/ZHHantDateParser').Parser;
93
+ exports.ZHHantWeekdayParser = require('./zh-Hant/ZHHantWeekdayParser').Parser;
94
+ exports.ZHHantTimeExpressionParser = require('./zh-Hant/ZHHantTimeExpressionParser').Parser;
95
+ exports.ZHHantCasualDateParser = require('./zh-Hant/ZHHantCasualDateParser').Parser;
96
+ exports.ZHHantDeadlineFormatParser = require('./zh-Hant/ZHHantDeadlineFormatParser').Parser;
97
+
98
+ exports.DEDeadlineFormatParser = require('./de/DEDeadlineFormatParser').Parser;
99
+ exports.DEMonthNameLittleEndianParser = require('./de/DEMonthNameLittleEndianParser').Parser;
100
+ exports.DEMonthNameParser = require('./de/DEMonthNameParser').Parser;
101
+ exports.DESlashDateFormatParser = require('./de/DESlashDateFormatParser').Parser;
102
+ exports.DETimeAgoFormatParser = require('./de/DETimeAgoFormatParser').Parser;
103
+ exports.DETimeExpressionParser = require('./de/DETimeExpressionParser').Parser;
104
+ exports.DEWeekdayParser = require('./de/DEWeekdayParser').Parser;
105
+ exports.DECasualDateParser = require('./de/DECasualDateParser').Parser;
@@ -9,9 +9,9 @@ var ParsedResult = require('../../result').ParsedResult;
9
9
 
10
10
  var PATTERN = new RegExp(
11
11
  '(而家|立(?:刻|即)|即刻)|' +
12
- '(今|明|聽|昨|尋|琴)(早|朝|晚)|' +
12
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +
13
13
  '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +
14
- '(今|明|聽|昨|尋|琴)(?:日|天)' +
14
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +
15
15
  '(?:[\\s|,|,]*)' +
16
16
  '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?', 'i');
17
17
 
@@ -58,6 +58,14 @@ exports.Parser = function ZHHantCasualDateParser() {
58
58
  }
59
59
  } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {
60
60
  startMoment.add(-1, 'day');
61
+ } else if (day1 == "前"){
62
+ startMoment.add(-2, 'day');
63
+ } else if (day1 == "大前"){
64
+ startMoment.add(-3, 'day');
65
+ } else if ( day1 == "後"){
66
+ startMoment.add(2, 'day');
67
+ } else if (day1 == "大後"){
68
+ startMoment.add(3, 'day');
61
69
  }
62
70
 
63
71
  if (time1 == '早' || time1 == '朝') {
@@ -95,6 +103,14 @@ exports.Parser = function ZHHantCasualDateParser() {
95
103
  }
96
104
  } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {
97
105
  startMoment.add(-1, 'day');
106
+ } else if (day3 == "前"){
107
+ startMoment.add(-2, 'day');
108
+ } else if (day3 == "大前"){
109
+ startMoment.add(-3, 'day');
110
+ } else if (day3 == "後"){
111
+ startMoment.add(2, 'day');
112
+ } else if (day3 == "大後"){
113
+ startMoment.add(3, 'day');
98
114
  }
99
115
 
100
116
 
@@ -12,9 +12,9 @@ var util = require('../../utils/ZH-Hant.js');
12
12
 
13
13
  var patternString1 = '(?:由|從|自)?' +
14
14
  '(?:' +
15
- '(今|明|聽|昨|尋|琴)(早|朝|晚)|' +
15
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +
16
16
  '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +
17
- '(今|明|聽|昨|尋|琴)(?:日|天)' +
17
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +
18
18
  '(?:[\\s,,]*)' +
19
19
  '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?' +
20
20
  ')?' +
@@ -28,9 +28,9 @@ var patternString1 = '(?:由|從|自)?' +
28
28
 
29
29
  var patternString2 = '(?:\\s*(?:到|至|\\-|\\–|\\~|\\〜)\\s*)' +
30
30
  '(?:' +
31
- '(今|明|聽|昨|尋|琴)(早|朝|晚)|' +
31
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(早|朝|晚)|' +
32
32
  '(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨))|' +
33
- '(今|明|聽|昨|尋|琴)(?:日|天)' +
33
+ '(今|明|前|大前|後|大後|聽|昨|尋|琴)(?:日|天)' +
34
34
  '(?:[\\s,,]*)' +
35
35
  '(?:(上(?:午|晝)|朝(?:早)|早(?:上)|下(?:午|晝)|晏(?:晝)|晚(?:上)|夜(?:晚)?|中(?:午)|凌(?:晨)))?' +
36
36
  ')?' +
@@ -86,6 +86,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
86
86
  }
87
87
  } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {
88
88
  startMoment.add(-1, 'day');
89
+ } else if (day1 == "前"){
90
+ startMoment.add(-2, 'day');
91
+ } else if (day1 == "大前"){
92
+ startMoment.add(-3, 'day');
93
+ } else if (day1 == "後"){
94
+ startMoment.add(2, 'day');
95
+ } else if (day1 == "大後"){
96
+ startMoment.add(3, 'day');
89
97
  }
90
98
  result.start.assign('day', startMoment.date());
91
99
  result.start.assign('month', startMoment.month() + 1);
@@ -96,6 +104,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
96
104
  startMoment.add(1, 'day');
97
105
  } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {
98
106
  startMoment.add(-1, 'day');
107
+ } else if (day3 == "前"){
108
+ startMoment.add(-2, 'day');
109
+ } else if (day3 == "大前"){
110
+ startMoment.add(-3, 'day');
111
+ } else if (day3 == "後"){
112
+ startMoment.add(2, 'day');
113
+ } else if (day3 == "大後"){
114
+ startMoment.add(3, 'day');
99
115
  }
100
116
  result.start.assign('day', startMoment.date());
101
117
  result.start.assign('month', startMoment.month() + 1);
@@ -237,6 +253,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
237
253
  }
238
254
  } else if (day1 == '昨' || day1 == '尋' || day1 == '琴') {
239
255
  endMoment.add(-1, 'day');
256
+ } else if (day1 == "前"){
257
+ endMoment.add(-2, 'day');
258
+ } else if (day1 == "大前"){
259
+ endMoment.add(-3, 'day');
260
+ } else if (day1 == "後"){
261
+ endMoment.add(2, 'day');
262
+ } else if (day1 == "大後"){
263
+ endMoment.add(3, 'day');
240
264
  }
241
265
  result.end.assign('day', endMoment.date());
242
266
  result.end.assign('month', endMoment.month() + 1);
@@ -247,6 +271,14 @@ exports.Parser = function ZHHantTimeExpressionParser() {
247
271
  endMoment.add(1, 'day');
248
272
  } else if (day3 == '昨' || day3 == '尋' || day3 == '琴') {
249
273
  endMoment.add(-1, 'day');
274
+ } else if (day3 == "前"){
275
+ endMoment.add(-2, 'day');
276
+ } else if (day3 == "大前"){
277
+ endMoment.add(-3, 'day');
278
+ } else if (day3 == "後"){
279
+ endMoment.add(2, 'day');
280
+ } else if (day3 == "大後"){
281
+ endMoment.add(3, 'day');
250
282
  }
251
283
  result.end.assign('day', endMoment.date());
252
284
  result.end.assign('month', endMoment.month() + 1);
@@ -6,7 +6,7 @@
6
6
  var moment = require('moment');
7
7
  var Parser = require('../parser').Parser;
8
8
  var ParsedResult = require('../../result').ParsedResult;
9
- var updateParsedComponent = require('../EN/ENWeekdayParser').updateParsedComponent;
9
+ var updateParsedComponent = require('../en/ENWeekdayParser').updateParsedComponent;
10
10
 
11
11
  var util = require('../../utils/ZH-Hant.js');
12
12
 
@@ -4,28 +4,40 @@
4
4
  var Refiner = require('./refiner').Refiner;
5
5
 
6
6
  // Map ABBR -> Offset in minute
7
- var TIMEZONE_ABBR_MAP = {};
8
7
  var TIMEZONE_NAME_PATTERN = new RegExp("^\\s*\\(?([A-Z]{2,4})\\)?(?=\\W|$)", 'i');
8
+ var DEFAULT_TIMEZONE_ABBR_MAP = {
9
+ "ACDT":630,"ACST":570,"ADT":-180,"AEDT":660,"AEST":600,"AFT":270,"AKDT":-480,"AKST":-540,"ALMT":360,"AMST":-180,"AMT":-240,"ANAST":720,"ANAT":720,"AQTT":300,"ART":-180,"AST":-240,"AWDT":540,"AWST":480,"AZOST":0,"AZOT":-60,"AZST":300,"AZT":240,"BNT":480,"BOT":-240,"BRST":-120,"BRT":-180,"BST":60,"BTT":360,"CAST":480,"CAT":120,"CCT":390,"CDT":-300,"CEST":120,"CET":60,"CHADT":825,"CHAST":765,"CKT":-600,"CLST":-180,"CLT":-240,"COT":-300,"CST":-360,"CVT":-60,"CXT":420,"ChST":600,"DAVT":420,"EASST":-300,"EAST":-360,"EAT":180,"ECT":-300,"EDT":-240,"EEST":180,"EET":120,"EGST":0,"EGT":-60,"EST":-300,"ET":-300,"FJST":780,"FJT":720,"FKST":-180,"FKT":-240,"FNT":-120,"GALT":-360,"GAMT":-540,"GET":240,"GFT":-180,"GILT":720,"GMT":0,"GST":240,"GYT":-240,"HAA":-180,"HAC":-300,"HADT":-540,"HAE":-240,"HAP":-420,"HAR":-360,"HAST":-600,"HAT":-90,"HAY":-480,"HKT":480,"HLV":-210,"HNA":-240,"HNC":-360,"HNE":-300,"HNP":-480,"HNR":-420,"HNT":-150,"HNY":-540,"HOVT":420,"ICT":420,"IDT":180,"IOT":360,"IRDT":270,"IRKST":540,"IRKT":540,"IRST":210,"IST":330,"JST":540,"KGT":360,"KRAST":480,"KRAT":480,"KST":540,"KUYT":240,"LHDT":660,"LHST":630,"LINT":840,"MAGST":720,"MAGT":720,"MART":-510,"MAWT":300,"MDT":-360,"MESZ":120,"MEZ":60,"MHT":720,"MMT":390,"MSD":240,"MSK":240,"MST":-420,"MUT":240,"MVT":300,"MYT":480,"NCT":660,"NDT":-90,"NFT":690,"NOVST":420,"NOVT":360,"NPT":345,"NST":-150,"NUT":-660,"NZDT":780,"NZST":720,"OMSST":420,"OMST":420,"PDT":-420,"PET":-300,"PETST":720,"PETT":720,"PGT":600,"PHOT":780,"PHT":480,"PKT":300,"PMDT":-120,"PMST":-180,"PONT":660,"PST":-480,"PT":-480,"PWT":540,"PYST":-180,"PYT":-240,"RET":240,"SAMT":240,"SAST":120,"SBT":660,"SCT":240,"SGT":480,"SRT":-180,"SST":-660,"TAHT":-600,"TFT":300,"TJT":300,"TKT":780,"TLT":540,"TMT":300,"TVT":720,"ULAT":480,"UTC":0,"UYST":-120,"UYT":-180,"UZT":300,"VET":-210,"VLAST":660,"VLAT":660,"VUT":660,"WAST":120,"WAT":60,"WEST":60,"WESZ":60,"WET":0,"WEZ":0,"WFT":720,"WGST":-120,"WGT":-180,"WIB":420,"WIT":540,"WITA":480,"WST":780,"WT":0,"YAKST":600,"YAKT":600,"YAPT":600,"YEKST":360,"YEKT":360
10
+ };
9
11
 
10
- exports.Refiner = function ExtractTimezoneAbbrRefiner() {
11
- Refiner.call(this);
12
+ exports.Refiner = function ExtractTimezoneAbbrRefiner(config) {
13
+ Refiner.call(this, arguments);
12
14
 
13
15
  this.refine = function(text, results, opt) {
14
16
 
17
+ var timezones = new Object(DEFAULT_TIMEZONE_ABBR_MAP);
18
+ if (opt.timezones) {
19
+ for (var name in opt.timezones) {
20
+ timezones[name] = opt.timezones[name];
21
+ }
22
+ }
23
+
15
24
  results.forEach(function(result) {
16
25
 
17
- if (!result.tags['ENTimeExpressionParser'] && !result.tags['ZHTimeExpressionParser'] && !result.tags['FRTimeExpressionParser'] && !result.tags['DETimeExpressionParser']) {
26
+ if (!result.tags['ENTimeExpressionParser'] &&
27
+ !result.tags['ZHTimeExpressionParser'] &&
28
+ !result.tags['FRTimeExpressionParser'] &&
29
+ !result.tags['DETimeExpressionParser']) {
18
30
  return;
19
31
  }
20
32
 
21
33
  var match = TIMEZONE_NAME_PATTERN.exec(text.substring(result.index + result.text.length));
22
34
  if (match) {
23
35
  var timezoneAbbr = match[1].toUpperCase();
24
- if (TIMEZONE_ABBR_MAP[timezoneAbbr] === undefined) {
36
+ if (timezones[timezoneAbbr] === undefined) {
25
37
  return;
26
38
  }
27
39
 
28
- var timezoneOffset = TIMEZONE_ABBR_MAP[timezoneAbbr];
40
+ var timezoneOffset = timezones[timezoneAbbr];
29
41
  if (!result.start.isCertain('timezoneOffset')) {
30
42
  result.start.assign('timezoneOffset', timezoneOffset);
31
43
  }
@@ -41,7 +53,4 @@ exports.Refiner = function ExtractTimezoneAbbrRefiner() {
41
53
 
42
54
  return results;
43
55
  }
44
- }
45
-
46
- // TODO: Move this to some configuration
47
- TIMEZONE_ABBR_MAP = {"ACDT":630,"ACST":570,"ADT":-180,"AEDT":660,"AEST":600,"AFT":270,"AKDT":-480,"AKST":-540,"ALMT":360,"AMST":-180,"AMT":-240,"ANAST":720,"ANAT":720,"AQTT":300,"ART":-180,"AST":-240,"AWDT":540,"AWST":480,"AZOST":0,"AZOT":-60,"AZST":300,"AZT":240,"BNT":480,"BOT":-240,"BRST":-120,"BRT":-180,"BST":60,"BTT":360,"CAST":480,"CAT":120,"CCT":390,"CDT":-300,"CEST":120,"CET":60,"CHADT":825,"CHAST":765,"CKT":-600,"CLST":-180,"CLT":-240,"COT":-300,"CST":-360,"CVT":-60,"CXT":420,"ChST":600,"DAVT":420,"EASST":-300,"EAST":-360,"EAT":180,"ECT":-300,"EDT":-240,"EEST":180,"EET":120,"EGST":0,"EGT":-60,"EST":-300,"ET":-300,"FJST":780,"FJT":720,"FKST":-180,"FKT":-240,"FNT":-120,"GALT":-360,"GAMT":-540,"GET":240,"GFT":-180,"GILT":720,"GMT":0,"GST":240,"GYT":-240,"HAA":-180,"HAC":-300,"HADT":-540,"HAE":-240,"HAP":-420,"HAR":-360,"HAST":-600,"HAT":-90,"HAY":-480,"HKT":480,"HLV":-210,"HNA":-240,"HNC":-360,"HNE":-300,"HNP":-480,"HNR":-420,"HNT":-150,"HNY":-540,"HOVT":420,"ICT":420,"IDT":180,"IOT":360,"IRDT":270,"IRKST":540,"IRKT":540,"IRST":210,"IST":60,"JST":540,"KGT":360,"KRAST":480,"KRAT":480,"KST":540,"KUYT":240,"LHDT":660,"LHST":630,"LINT":840,"MAGST":720,"MAGT":720,"MART":-510,"MAWT":300,"MDT":-360,"MESZ":120,"MEZ":60,"MHT":720,"MMT":390,"MSD":240,"MSK":240,"MST":-420,"MUT":240,"MVT":300,"MYT":480,"NCT":660,"NDT":-90,"NFT":690,"NOVST":420,"NOVT":360,"NPT":345,"NST":-150,"NUT":-660,"NZDT":780,"NZST":720,"OMSST":420,"OMST":420,"PDT":-420,"PET":-300,"PETST":720,"PETT":720,"PGT":600,"PHOT":780,"PHT":480,"PKT":300,"PMDT":-120,"PMST":-180,"PONT":660,"PST":-480,"PT":-480,"PWT":540,"PYST":-180,"PYT":-240,"RET":240,"SAMT":240,"SAST":120,"SBT":660,"SCT":240,"SGT":480,"SRT":-180,"SST":-660,"TAHT":-600,"TFT":300,"TJT":300,"TKT":780,"TLT":540,"TMT":300,"TVT":720,"ULAT":480,"UTC":0,"UYST":-120,"UYT":-180,"UZT":300,"VET":-210,"VLAST":660,"VLAT":660,"VUT":660,"WAST":120,"WAT":60,"WEST":60,"WESZ":60,"WET":0,"WEZ":0,"WFT":720,"WGST":-120,"WGT":-180,"WIB":420,"WIT":540,"WITA":480,"WST":780,"WT":0,"YAKST":600,"YAKT":600,"YAPT":600,"YEKST":360,"YEKT":360}
56
+ };
@@ -11,7 +11,7 @@ exports.Refiner = function ForwardDateRefiner() {
11
11
 
12
12
  this.refine = function(text, results, opt) {
13
13
 
14
- if (!opt['forwardDate'] && !opt['forwardDatesOnly']) {
14
+ if (!opt['forwardDate']) {
15
15
  return results;
16
16
  }
17
17
 
@@ -1,7 +1,7 @@
1
1
  /*
2
2
 
3
3
  */
4
- var ENMergeDateRangeRefiner = require('../EN/ENMergeDateRangeRefiner').Refiner;
4
+ var ENMergeDateRangeRefiner = require('../en/ENMergeDateRangeRefiner').Refiner;
5
5
 
6
6
  exports.Refiner = function DEMergeDateRangeRefiner() {
7
7
  ENMergeDateRangeRefiner.call(this);
@@ -4,9 +4,9 @@
4
4
  var ParsedComponents = require('../../result').ParsedComponents;
5
5
  var Refiner = require('../refiner').Refiner;
6
6
 
7
- var mergeDateTimeComponent = require('../EN/ENMergeDateTimeRefiner').mergeDateTimeComponent;
8
- var isDateOnly = require('../EN/ENMergeDateTimeRefiner').isDateOnly;
9
- var isTimeOnly = require('../EN/ENMergeDateTimeRefiner').isTimeOnly;
7
+ var mergeDateTimeComponent = require('../en/ENMergeDateTimeRefiner').mergeDateTimeComponent;
8
+ var isDateOnly = require('../en/ENMergeDateTimeRefiner').isDateOnly;
9
+ var isTimeOnly = require('../en/ENMergeDateTimeRefiner').isTimeOnly;
10
10
 
11
11
  var PATTERN = new RegExp("^\\s*(T|um|am|,|-)?\\s*$");
12
12
 
@@ -55,6 +55,8 @@ exports.Refiner = function ENMergeDateRangeRefiner() {
55
55
  this.mergeResult = function(text, fromResult, toResult) {
56
56
 
57
57
  if (!this.isWeekdayResult(fromResult) && !this.isWeekdayResult(toResult)) {
58
+
59
+ var timeKeys = {'hour': true, 'minute': true, 'second': true};
58
60
 
59
61
  for (var key in toResult.start.knownValues) {
60
62
  if (!fromResult.start.isCertain(key)) {
@@ -70,9 +72,25 @@ exports.Refiner = function ENMergeDateRangeRefiner() {
70
72
  }
71
73
 
72
74
  if (fromResult.start.date().getTime() > toResult.start.date().getTime()) {
73
- var tmp = toResult;
74
- toResult = fromResult;
75
- fromResult = tmp;
75
+
76
+ var fromMoment = fromResult.start.moment();
77
+ var toMoment = toResult.start.moment();
78
+
79
+ if (this.isWeekdayResult(fromResult) && fromMoment.clone().add(-7, 'days').isBefore(toMoment)) {
80
+ fromMoment = fromMoment.add(-7, 'days');
81
+ fromResult.start.imply('day', fromMoment.date());
82
+ fromResult.start.imply('month', fromMoment.month() + 1);
83
+ fromResult.start.imply('year', fromMoment.year());
84
+ } else if (this.isWeekdayResult(toResult) && toMoment.clone().add(7, 'days').isAfter(fromMoment)) {
85
+ toMoment = toMoment.add(7, 'days');
86
+ toResult.start.imply('day', toMoment.date());
87
+ toResult.start.imply('month', toMoment.month() + 1);
88
+ toResult.start.imply('year', toMoment.year());
89
+ } else {
90
+ var tmp = toResult;
91
+ toResult = fromResult;
92
+ fromResult = tmp;
93
+ }
76
94
  }
77
95
 
78
96
  fromResult.end = toResult.start;