chrono-node 2.7.5 → 2.7.7

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 (118) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/common/parsers/AbstractTimeExpressionParser.js +11 -2
  3. package/dist/cjs/common/parsers/AbstractTimeExpressionParser.js.map +1 -1
  4. package/dist/cjs/common/parsers/ISOFormatParser.d.ts +1 -12
  5. package/dist/cjs/common/parsers/ISOFormatParser.js +30 -28
  6. package/dist/cjs/common/parsers/ISOFormatParser.js.map +1 -1
  7. package/dist/cjs/common/parsers/SlashDateFormatParser.js +13 -6
  8. package/dist/cjs/common/parsers/SlashDateFormatParser.js.map +1 -1
  9. package/dist/cjs/common/refiners/ForwardDateRefiner.js +8 -5
  10. package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
  11. package/dist/cjs/locales/en/configuration.js +4 -2
  12. package/dist/cjs/locales/en/configuration.js.map +1 -1
  13. package/dist/cjs/locales/en/constants.d.ts +1 -1
  14. package/dist/cjs/locales/en/constants.js +6 -0
  15. package/dist/cjs/locales/en/constants.js.map +1 -1
  16. package/dist/cjs/locales/en/parsers/ENMonthNameLittleEndianParser.js +1 -1
  17. package/dist/cjs/locales/en/parsers/ENMonthNameLittleEndianParser.js.map +1 -1
  18. package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -0
  19. package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
  20. package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +3 -0
  21. package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
  22. package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js +5 -2
  23. package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
  24. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -0
  25. package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  26. package/dist/cjs/locales/en/parsers/{ENCasualYearMonthDayParser.d.ts → ENYearMonthDayParser.d.ts} +3 -1
  27. package/dist/cjs/locales/en/parsers/{ENCasualYearMonthDayParser.js → ENYearMonthDayParser.js} +20 -8
  28. package/dist/cjs/locales/en/parsers/ENYearMonthDayParser.js.map +1 -0
  29. package/dist/cjs/locales/en/refiners/ENExtractYearSuffixRefiner.d.ts +5 -0
  30. package/dist/cjs/locales/en/refiners/ENExtractYearSuffixRefiner.js +31 -0
  31. package/dist/cjs/locales/en/refiners/ENExtractYearSuffixRefiner.js.map +1 -0
  32. package/dist/cjs/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -1
  33. package/dist/cjs/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -1
  34. package/dist/cjs/locales/zh/index.d.ts +12 -1
  35. package/dist/cjs/locales/zh/index.js +65 -5
  36. package/dist/cjs/locales/zh/index.js.map +1 -1
  37. package/dist/cjs/results.js +7 -4
  38. package/dist/cjs/results.js.map +1 -1
  39. package/dist/esm/common/parsers/AbstractTimeExpressionParser.js +11 -2
  40. package/dist/esm/common/parsers/AbstractTimeExpressionParser.js.map +1 -1
  41. package/dist/esm/common/parsers/ISOFormatParser.d.ts +1 -12
  42. package/dist/esm/common/parsers/ISOFormatParser.js +30 -28
  43. package/dist/esm/common/parsers/ISOFormatParser.js.map +1 -1
  44. package/dist/esm/common/parsers/SlashDateFormatParser.js +13 -6
  45. package/dist/esm/common/parsers/SlashDateFormatParser.js.map +1 -1
  46. package/dist/esm/common/refiners/ForwardDateRefiner.js +8 -5
  47. package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
  48. package/dist/esm/locales/en/configuration.js +4 -2
  49. package/dist/esm/locales/en/configuration.js.map +1 -1
  50. package/dist/esm/locales/en/constants.d.ts +1 -1
  51. package/dist/esm/locales/en/constants.js +6 -0
  52. package/dist/esm/locales/en/constants.js.map +1 -1
  53. package/dist/esm/locales/en/parsers/ENMonthNameLittleEndianParser.js +1 -1
  54. package/dist/esm/locales/en/parsers/ENMonthNameLittleEndianParser.js.map +1 -1
  55. package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js +3 -0
  56. package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
  57. package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +3 -0
  58. package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
  59. package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js +5 -2
  60. package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
  61. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js +3 -0
  62. package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
  63. package/dist/esm/locales/en/parsers/{ENCasualYearMonthDayParser.d.ts → ENYearMonthDayParser.d.ts} +3 -1
  64. package/dist/esm/locales/en/parsers/{ENCasualYearMonthDayParser.js → ENYearMonthDayParser.js} +19 -7
  65. package/dist/esm/locales/en/parsers/ENYearMonthDayParser.js.map +1 -0
  66. package/dist/esm/locales/en/refiners/ENExtractYearSuffixRefiner.d.ts +5 -0
  67. package/dist/esm/locales/en/refiners/ENExtractYearSuffixRefiner.js +28 -0
  68. package/dist/esm/locales/en/refiners/ENExtractYearSuffixRefiner.js.map +1 -0
  69. package/dist/esm/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -1
  70. package/dist/esm/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -1
  71. package/dist/esm/locales/zh/index.d.ts +12 -1
  72. package/dist/esm/locales/zh/index.js +53 -1
  73. package/dist/esm/locales/zh/index.js.map +1 -1
  74. package/dist/esm/results.js +7 -4
  75. package/dist/esm/results.js.map +1 -1
  76. package/package.json +1 -1
  77. package/src/common/parsers/AbstractTimeExpressionParser.ts +16 -2
  78. package/src/common/parsers/ISOFormatParser.ts +30 -32
  79. package/src/common/parsers/SlashDateFormatParser.ts +13 -10
  80. package/src/common/refiners/ForwardDateRefiner.ts +8 -5
  81. package/src/locales/en/configuration.ts +8 -2
  82. package/src/locales/en/constants.ts +7 -1
  83. package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +1 -1
  84. package/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +3 -1
  85. package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +4 -2
  86. package/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +5 -2
  87. package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +4 -2
  88. package/src/locales/en/parsers/{ENCasualYearMonthDayParser.ts → ENYearMonthDayParser.ts} +18 -7
  89. package/src/locales/en/refiners/ENExtractYearSuffixRefiner.ts +34 -0
  90. package/src/locales/en/refiners/ENMergeDateTimeRefiner.ts +1 -1
  91. package/src/locales/zh/index.ts +73 -1
  92. package/src/results.ts +8 -5
  93. package/test/en/en_casual.test.ts +6 -0
  94. package/test/en/en_inter_std.test.ts +30 -28
  95. package/test/en/en_merging_relative_dates.test.ts +3 -4
  96. package/test/en/en_slash.test.ts +62 -42
  97. package/test/en/en_time_exp.test.ts +88 -0
  98. package/test/en/en_time_units_ago.test.ts +34 -0
  99. package/test/en/en_time_units_casual_relative.test.ts +3 -0
  100. package/test/en/en_time_units_later.test.ts +4 -0
  101. package/test/en/en_time_units_within.test.ts +5 -0
  102. package/test/en/en_year.test.ts +26 -1
  103. package/test/en/{en_casual_year_month_day.test.ts → en_year_month_day.test.ts} +25 -4
  104. package/test/system.test.ts +2 -0
  105. package/test/system_timezone.test.ts +11 -0
  106. package/test/zh/{zh_hans_casual.test.ts → hans/zh_hans_casual.test.ts} +2 -2
  107. package/test/zh/{zh_hans_date.test.ts → hans/zh_hans_date.test.ts} +2 -2
  108. package/test/zh/{zh_hans_deadline.test.ts → hans/zh_hans_deadline.test.ts} +2 -2
  109. package/test/zh/{zh_hans_time_exp.test.ts → hans/zh_hans_time_exp.test.ts} +16 -2
  110. package/test/zh/{zh_hans_weekday.test.ts → hans/zh_hans_weekday.test.ts} +2 -2
  111. package/test/zh/{zh_hant_casual.test.ts → hant/zh_hant_casual.test.ts} +2 -2
  112. package/test/zh/{zh_hant_date.test.ts → hant/zh_hant_date.test.ts} +2 -2
  113. package/test/zh/{zh_hant_deadline.test.ts → hant/zh_hant_deadline.test.ts} +2 -2
  114. package/test/zh/{zh_hant_time_exp.test.ts → hant/zh_hant_time_exp.test.ts} +2 -2
  115. package/test/zh/{zh_hant_weekday.test.ts → hant/zh_hant_weekday.test.ts} +2 -2
  116. package/test/zh/zh.test.ts +18 -0
  117. package/dist/cjs/locales/en/parsers/ENCasualYearMonthDayParser.js.map +0 -1
  118. package/dist/esm/locales/en/parsers/ENCasualYearMonthDayParser.js.map +0 -1
@@ -8,31 +8,7 @@ test("Test - Parsing Offset Expression", function () {
8
8
  });
9
9
  });
10
10
 
11
- test("Test - Single Expression", function () {
12
- testSingleCase(chrono, "The event is going ahead (04/2016)", new Date(2012, 7, 10), (result) => {
13
- expect(result.start).not.toBeNull();
14
- expect(result.start.get("year")).toBe(2016);
15
- expect(result.start.get("month")).toBe(4);
16
- expect(result.start.get("day")).toBe(1);
17
-
18
- expect(result.index).toBe(26);
19
- expect(result.text).toBe("04/2016");
20
-
21
- expect(result.start).toBeDate(new Date(2016, 4 - 1, 1, 12));
22
- });
23
-
24
- testSingleCase(chrono, "Published: 06/2004", new Date(2012, 7, 10), (result) => {
25
- expect(result.start).not.toBeNull();
26
- expect(result.start.get("year")).toBe(2004);
27
- expect(result.start.get("month")).toBe(6);
28
- expect(result.start.get("day")).toBe(1);
29
-
30
- expect(result.index).toBe(11);
31
- expect(result.text).toBe("06/2004");
32
-
33
- expect(result.start).toBeDate(new Date(2004, 6 - 1, 1, 12));
34
- });
35
-
11
+ test("Test - Single Expression (MM/dd/yyyy)", function () {
36
12
  testSingleCase(chrono, "8/10/2012", new Date(2012, 7, 10), (result) => {
37
13
  expect(result.start).not.toBeNull();
38
14
  expect(result.start.get("year")).toBe(2012);
@@ -61,22 +37,6 @@ test("Test - Single Expression", function () {
61
37
  expect(result.start).toBeDate(new Date(2012, 8 - 1, 1, 12));
62
38
  });
63
39
 
64
- testSingleCase(chrono, "8/10", new Date(2012, 7, 10), (result) => {
65
- expect(result.start).not.toBeNull();
66
- expect(result.start.get("year")).toBe(2012);
67
- expect(result.start.get("month")).toBe(8);
68
- expect(result.start.get("day")).toBe(10);
69
-
70
- expect(result.index).toBe(0);
71
- expect(result.text).toBe("8/10");
72
-
73
- expect(result.start.isCertain("day")).toBe(true);
74
- expect(result.start.isCertain("month")).toBe(true);
75
- expect(result.start.isCertain("year")).toBe(false);
76
-
77
- expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
78
- });
79
-
80
40
  testSingleCase(chrono, "The Deadline is 8/10/2012", new Date(2012, 7, 10), (result) => {
81
41
  expect(result.index).toBe(16);
82
42
  expect(result.text).toBe("8/10/2012");
@@ -103,7 +63,7 @@ test("Test - Single Expression", function () {
103
63
  });
104
64
  });
105
65
 
106
- test("Test - Single Expression Little-Endian", function () {
66
+ test("Test - Single Expression Little-Endian (dd/MM/yyyy)", function () {
107
67
  testSingleCase(chrono.en.GB, "8/10/2012", new Date(2012, 7, 10), (result) => {
108
68
  expect(result.start).not.toBeNull();
109
69
  expect(result.start.get("year")).toBe(2012);
@@ -136,6 +96,65 @@ test("Test - Single Expression Little-Endian with Month name", function () {
136
96
 
137
97
  expect(result.start).toBeDate(new Date(2012, 10 - 1, 8, 12));
138
98
  });
99
+
100
+ testSingleCase(chrono.strict, "06/Nov/2023", (result) => {
101
+ expect(result.text).toBe("06/Nov/2023");
102
+ expect(result).toBeDate(new Date(2023, 11 - 1, 6, 12));
103
+ });
104
+
105
+ testSingleCase(chrono.strict, "06/Nov/2023:06:36:02", (result) => {
106
+ expect(result.text).toBe("06/Nov/2023:06:36:02");
107
+ expect(result).toBeDate(new Date(2023, 11 - 1, 6, 6, 36, 2));
108
+ });
109
+
110
+ testSingleCase(chrono.strict, "06/Nov/2023:06:36:02 +0200", (result) => {
111
+ expect(result.text).toBe("06/Nov/2023:06:36:02 +0200");
112
+ expect(result).toBeDate(new Date("Mon Nov 06 2023 06:36:02 GMT+0200"));
113
+ });
114
+ });
115
+
116
+ test("Test - Single Expression Shorten (mm/yyyy)", () => {
117
+ testSingleCase(chrono, "The event is going ahead (04/2016)", new Date(2012, 7, 10), (result) => {
118
+ expect(result.start).not.toBeNull();
119
+ expect(result.start.get("year")).toBe(2016);
120
+ expect(result.start.get("month")).toBe(4);
121
+ expect(result.start.get("day")).toBe(1);
122
+
123
+ expect(result.index).toBe(26);
124
+ expect(result.text).toBe("04/2016");
125
+
126
+ expect(result.start).toBeDate(new Date(2016, 4 - 1, 1, 12));
127
+ });
128
+
129
+ testSingleCase(chrono, "Published: 06/2004", new Date(2012, 7, 10), (result) => {
130
+ expect(result.start).not.toBeNull();
131
+ expect(result.start.get("year")).toBe(2004);
132
+ expect(result.start.get("month")).toBe(6);
133
+ expect(result.start.get("day")).toBe(1);
134
+
135
+ expect(result.index).toBe(11);
136
+ expect(result.text).toBe("06/2004");
137
+
138
+ expect(result.start).toBeDate(new Date(2004, 6 - 1, 1, 12));
139
+ });
140
+ });
141
+
142
+ test("Test - Single Expression Shorten (dd/mm)", () => {
143
+ testSingleCase(chrono, "8/10", new Date(2012, 7, 10), (result) => {
144
+ expect(result.start).not.toBeNull();
145
+ expect(result.start.get("year")).toBe(2012);
146
+ expect(result.start.get("month")).toBe(8);
147
+ expect(result.start.get("day")).toBe(10);
148
+
149
+ expect(result.index).toBe(0);
150
+ expect(result.text).toBe("8/10");
151
+
152
+ expect(result.start.isCertain("day")).toBe(true);
153
+ expect(result.start.isCertain("month")).toBe(true);
154
+ expect(result.start.isCertain("year")).toBe(false);
155
+
156
+ expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
157
+ });
139
158
  });
140
159
 
141
160
  test("Test - Range Expression", function () {
@@ -220,6 +239,7 @@ test("Test - Impossible Dates and Unexpected Results", function () {
220
239
  testUnexpectedResult(chrono, "06/-31/2022");
221
240
  testUnexpectedResult(chrono, "18/13/2022");
222
241
  testUnexpectedResult(chrono, "15/28/2022");
242
+ testUnexpectedResult(chrono, "4/13/1");
223
243
  });
224
244
 
225
245
  test("Test - forward dates only option", function () {
@@ -24,6 +24,94 @@ test("Test - Time expression", function () {
24
24
  });
25
25
  });
26
26
 
27
+ test("Test - Time expression after date", function () {
28
+ testSingleCase(chrono, "05/31/2024 14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
29
+ expect(result.text).toBe(text);
30
+
31
+ expect(result.start.get("year")).toBe(2024);
32
+ expect(result.start.get("month")).toBe(5);
33
+ expect(result.start.get("day")).toBe(31);
34
+
35
+ expect(result.start.get("hour")).toBe(14);
36
+ expect(result.start.get("minute")).toBe(15);
37
+ expect(result.start.get("meridiem")).toBe(Meridiem.PM);
38
+ });
39
+
40
+ testSingleCase(chrono, "05/31/2024.14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
41
+ expect(result.text).toBe(text);
42
+
43
+ expect(result.start.get("year")).toBe(2024);
44
+ expect(result.start.get("month")).toBe(5);
45
+ expect(result.start.get("day")).toBe(31);
46
+
47
+ expect(result.start.get("hour")).toBe(14);
48
+ expect(result.start.get("minute")).toBe(15);
49
+ expect(result.start.get("meridiem")).toBe(Meridiem.PM);
50
+ });
51
+
52
+ testSingleCase(chrono, "05/31/2024:14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
53
+ expect(result.text).toBe(text);
54
+
55
+ expect(result.start.get("year")).toBe(2024);
56
+ expect(result.start.get("month")).toBe(5);
57
+ expect(result.start.get("day")).toBe(31);
58
+
59
+ expect(result.start.get("hour")).toBe(14);
60
+ expect(result.start.get("minute")).toBe(15);
61
+ expect(result.start.get("meridiem")).toBe(Meridiem.PM);
62
+ });
63
+
64
+ testSingleCase(chrono, "05/31/2024-14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
65
+ expect(result.text).toBe(text);
66
+
67
+ expect(result.start.get("year")).toBe(2024);
68
+ expect(result.start.get("month")).toBe(5);
69
+ expect(result.start.get("day")).toBe(31);
70
+
71
+ expect(result.start.get("hour")).toBe(14);
72
+ expect(result.start.get("minute")).toBe(15);
73
+ expect(result.start.get("meridiem")).toBe(Meridiem.PM);
74
+ });
75
+ });
76
+
77
+ test("Test - Time expression before date", () => {
78
+ testSingleCase(chrono, "14:15 05/31/2024", new Date(2016, 10 - 1, 1, 8), (result, text) => {
79
+ expect(result.text).toBe(text);
80
+
81
+ expect(result.start.get("year")).toBe(2024);
82
+ expect(result.start.get("month")).toBe(5);
83
+ expect(result.start.get("day")).toBe(31);
84
+
85
+ expect(result.start.get("hour")).toBe(14);
86
+ expect(result.start.get("minute")).toBe(15);
87
+ expect(result.start.get("meridiem")).toBe(Meridiem.PM);
88
+ });
89
+
90
+ testSingleCase(chrono, "8:23 AM, Jul 9", new Date(2016, 10 - 1, 1, 8), (result, text) => {
91
+ expect(result.text).toBe(text);
92
+
93
+ expect(result.start.get("year")).toBe(2016);
94
+ expect(result.start.get("month")).toBe(7);
95
+ expect(result.start.get("day")).toBe(9);
96
+
97
+ expect(result.start.get("hour")).toBe(8);
98
+ expect(result.start.get("minute")).toBe(23);
99
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
100
+ });
101
+
102
+ testSingleCase(chrono, "8:23 AM ∙ Jul 9", new Date(2016, 10 - 1, 1, 8), (result, text) => {
103
+ expect(result.text).toBe(text);
104
+
105
+ expect(result.start.get("year")).toBe(2016);
106
+ expect(result.start.get("month")).toBe(7);
107
+ expect(result.start.get("day")).toBe(9);
108
+
109
+ expect(result.start.get("hour")).toBe(8);
110
+ expect(result.start.get("minute")).toBe(23);
111
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
112
+ });
113
+ });
114
+
27
115
  test("Test - Time range expression", function () {
28
116
  testSingleCase(chrono, "10:00:00 - 21:45:00", new Date(2016, 10 - 1, 1, 8), (result, text) => {
29
117
  expect(result.text).toBe(text);
@@ -312,8 +312,42 @@ test("Test - Strict mode", function () {
312
312
  testUnexpectedResult(chrono.strict, "5 h ago", new Date(2012, 7, 10, 12, 14));
313
313
  });
314
314
 
315
+ test("Test - Forward date", () => {
316
+ // Note that it is actually impossible for X ago to be "forward dates".
317
+ // In such situation, we still return the correct actual extracted dates and make sure the option doesn't affect the results.
318
+ const reference = new Date("2024-09-10T12:00:00");
319
+ const options = { forwardDate: true };
320
+
321
+ testSingleCase(chrono, "2 days ago", reference, options, (result, text) => {
322
+ expect(result.start.get("year")).toBe(2024);
323
+ expect(result.start.get("month")).toBe(9);
324
+ expect(result.start.get("day")).toBe(8);
325
+ });
326
+
327
+ testSingleCase(chrono, "2 weeks ago", reference, options, (result, text) => {
328
+ expect(result.start.get("year")).toBe(2024);
329
+ expect(result.start.get("month")).toBe(8);
330
+ expect(result.start.get("day")).toBe(27);
331
+ });
332
+
333
+ testSingleCase(chrono, "2 months ago", reference, options, (result, text) => {
334
+ expect(result.start.get("year")).toBe(2024);
335
+ expect(result.start.get("month")).toBe(7);
336
+ expect(result.start.get("day")).toBe(10);
337
+ });
338
+
339
+ testSingleCase(chrono, "2 years ago", reference, options, (result, text) => {
340
+ expect(result.start.get("year")).toBe(2022);
341
+ expect(result.start.get("month")).toBe(9);
342
+ expect(result.start.get("day")).toBe(10);
343
+ });
344
+ });
345
+
315
346
  test("Test - Negative cases", function () {
316
347
  testUnexpectedResult(chrono, "15 hours 29 min");
317
348
  testUnexpectedResult(chrono, "a few hour");
318
349
  testUnexpectedResult(chrono, "5 days");
350
+
351
+ testUnexpectedResult(chrono, "am ago");
352
+ testUnexpectedResult(chrono, "them ago");
319
353
  });
@@ -164,4 +164,7 @@ test("Test - Negative cases", () => {
164
164
  testUnexpectedResult(chrono.casual, "1 m", new Date(2015, 7 - 1, 10, 12, 14));
165
165
  testUnexpectedResult(chrono.casual, "the day", new Date(2015, 7 - 1, 10, 12, 14));
166
166
  testUnexpectedResult(chrono.casual, "a day", new Date(2015, 7 - 1, 10, 12, 14));
167
+
168
+ testUnexpectedResult(chrono, "+am");
169
+ testUnexpectedResult(chrono, "+them");
167
170
  });
@@ -354,3 +354,7 @@ test("Test - Plus after reference", () => {
354
354
  expect(result.start.get("minute")).toBe(10);
355
355
  });
356
356
  });
357
+
358
+ test("Test - Negative cases", () => {
359
+ testUnexpectedResult(chrono, "tell them later");
360
+ });
@@ -408,3 +408,8 @@ test("Test - Forward date option", () => {
408
408
  expect(result.start.get("day")).toBe(1);
409
409
  });
410
410
  });
411
+
412
+ test("Test - Negative cases", () => {
413
+ testUnexpectedResult(chrono, "in am");
414
+ testUnexpectedResult(chrono, "in them");
415
+ });
@@ -1,6 +1,6 @@
1
1
  import * as chrono from "../../src";
2
2
  import { testSingleCase, testUnexpectedResult } from "../test_util";
3
- import ENTimeExpressionParser from "../../src/locales/en/parsers/ENTimeExpressionParser";
3
+ import { Meridiem } from "../../src";
4
4
 
5
5
  test("Test - Year numbers with BCE/CE Era label", () => {
6
6
  testSingleCase(chrono, "10 August 234 BCE", new Date(2012, 7, 10), (result) => {
@@ -73,3 +73,28 @@ test("Test - Year numbers with Buddhist Era label", () => {
73
73
  expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
74
74
  });
75
75
  });
76
+
77
+ test("Test - Year number after date/time expression", () => {
78
+ testSingleCase(chrono, "Thu Oct 26 11:00:09 2023", new Date(2016, 10 - 1, 1, 8), (result, text) => {
79
+ expect(result.start.get("year")).toBe(2023);
80
+ expect(result.start.get("month")).toBe(10);
81
+ expect(result.start.get("day")).toBe(26);
82
+
83
+ expect(result.start.get("hour")).toBe(11);
84
+ expect(result.start.get("minute")).toBe(0);
85
+ expect(result.start.get("second")).toBe(9);
86
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
87
+ });
88
+
89
+ testSingleCase(chrono, "Thu Oct 26 11:00:09 EDT 2023", new Date(2016, 10 - 1, 1, 8), (result, text) => {
90
+ expect(result.start.get("year")).toBe(2023);
91
+ expect(result.start.get("month")).toBe(10);
92
+ expect(result.start.get("day")).toBe(26);
93
+
94
+ expect(result.start.get("hour")).toBe(11);
95
+ expect(result.start.get("minute")).toBe(0);
96
+ expect(result.start.get("second")).toBe(9);
97
+ expect(result.start.get("meridiem")).toBe(Meridiem.AM);
98
+ expect(result.start.get("timezoneOffset")).toBe(-240);
99
+ });
100
+ });
@@ -1,7 +1,7 @@
1
1
  import { testSingleCase, testUnexpectedResult } from "../test_util";
2
2
  import * as chrono from "../../src";
3
3
 
4
- test("Test - Single Expression Start with Year", function () {
4
+ test("Test - Single Expression (yyyy/MM/dd)", function () {
5
5
  testSingleCase(chrono, "2012/8/10", new Date(2012, 7, 10), (result) => {
6
6
  expect(result.start).not.toBeNull();
7
7
  expect(result.start.get("year")).toBe(2012);
@@ -41,7 +41,7 @@ test("Test - Single Expression Start with Year", function () {
41
41
  });
42
42
  });
43
43
 
44
- test("Test - Single Expression Start with Year and Month Name", function () {
44
+ test("Test - Single Expression with month name (yyyy/MMM/dd)", function () {
45
45
  testSingleCase(chrono, "2012/Aug/10", new Date(2012, 7, 10), (result) => {
46
46
  expect(result.start).not.toBeNull();
47
47
  expect(result.start.get("year")).toBe(2012);
@@ -73,8 +73,29 @@ test("Test - Single Expression Start with Year and Month Name", function () {
73
73
  });
74
74
  });
75
75
 
76
- test("Test - Negative year-month-day like pattern", function () {
77
- testUnexpectedResult(chrono, "2012-80-10", new Date(2012, 7, 10));
76
+ test("Test - Allow swap date/month order in casual mode", () => {
77
+ testUnexpectedResult(chrono.strict, "2024/13/1");
78
+ testUnexpectedResult(chrono.strict, "2024-13-01");
78
79
 
80
+ testSingleCase(chrono.casual, "2024/13/1", new Date(2012, 7, 10), (result) => {
81
+ expect(result.start.get("year")).toBe(2024);
82
+ expect(result.start.get("month")).toBe(1);
83
+ expect(result.start.get("day")).toBe(13);
84
+ });
85
+
86
+ testSingleCase(chrono.casual, "2024-13-01", new Date(2012, 7, 10), (result) => {
87
+ expect(result.start.get("year")).toBe(2024);
88
+ expect(result.start.get("month")).toBe(1);
89
+ expect(result.start.get("day")).toBe(13);
90
+ });
91
+ });
92
+
93
+ test("Test - Not parse unlikely xxxx-xx-xx pattern", function () {
94
+ testUnexpectedResult(chrono, "2012/80/10", new Date(2012, 7, 10));
79
95
  testUnexpectedResult(chrono, "2012 80 10", new Date(2012, 7, 10));
80
96
  });
97
+
98
+ test("Test - Not parse impossible dates", function () {
99
+ testUnexpectedResult(chrono, "2014-08-32");
100
+ testUnexpectedResult(chrono, "2014-02-30");
101
+ });
@@ -241,4 +241,6 @@ test("Test - Compare with native js", () => {
241
241
  testByCompareWithNative("Fri, 31 Mar 2000 07:00:00 UTC");
242
242
 
243
243
  testByCompareWithNative("2014-12-14T18:22:14.759Z");
244
+
245
+ testByCompareWithNative("2024-01-01T00:00");
244
246
  });
@@ -54,6 +54,17 @@ test("Test - Timezone difference on reference date", function () {
54
54
  });
55
55
  });
56
56
 
57
+ test("Test - Timezone difference on reference date #2", function () {
58
+ const refInstant = new Date("2024-02-21T10:00:00+1300");
59
+
60
+ testSingleCase(chrono, "yesterday 18:00", { instant: refInstant, timezone: 780 }, (result) => {
61
+ // expect(result.start.get("year")).toBe(2024);
62
+ // expect(result.start.get("month")).toBe(2);
63
+ // expect(result.start.get("day")).toBe(20);
64
+ // expect(result).toBeDate(new Date("2024-02-20T18:00:00+1300"));
65
+ });
66
+ });
67
+
57
68
  test("Test - Timezone difference on written date", function () {
58
69
  // Sun Jun 06 2021 19:00:00 GMT+0900 (JST)
59
70
  // Sun Jun 06 2021 11:00:00 GMT+0100 (BST)
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hans, "我今天要打游戏", new Date(2012, 7, 10, 12), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hans, "我2016年9月3号要打游戏", new Date(2012, 8 - 1, 10), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hans, "五日内我要通关游戏", new Date(2012, 7, 10), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hans, "我上午6点13分打游戏", new Date(2012, 7, 10), (result) => {
@@ -47,6 +47,20 @@ test("Test - Single Expression", function () {
47
47
  const expectDate = new Date(2012, 7, 11, 8);
48
48
  expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
49
49
  });
50
+
51
+ testSingleCase(chrono.zh.hans, "早上8点", new Date(2012, 8 - 1, 10, 12), (result) => {
52
+ expect(result.text).toBe("早上8点");
53
+
54
+ expect(result.start).not.toBeNull();
55
+ expect(result.start.get("year")).toBe(2012);
56
+ expect(result.start.get("month")).toBe(8);
57
+ expect(result.start.get("day")).toBe(10);
58
+ expect(result.start.get("hour")).toBe(8);
59
+
60
+ const resultDate = result.start.date();
61
+ const expectDate = new Date(2012, 8 - 1, 10, 8);
62
+ expect(expectDate.getTime()).toBeCloseTo(resultDate.getTime());
63
+ });
50
64
  });
51
65
 
52
66
  test("Test - Range Expression", function () {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hans, "星期四", new Date(2016, 9 - 1, 2), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hant, "雞而家全部都係雞", new Date(2012, 7, 10, 8, 9, 10, 11), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hant, "雞2016年9月3號全部都係雞", new Date(2012, 8 - 1, 10), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hant, "五日內我地有d野做", new Date(2012, 7, 10), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hant, "雞上午6點13分全部都係雞", new Date(2012, 7, 10), (result) => {
@@ -1,5 +1,5 @@
1
- import * as chrono from "../../src";
2
- import { testSingleCase } from "../test_util";
1
+ import * as chrono from "../../../src";
2
+ import { testSingleCase } from "../../test_util";
3
3
 
4
4
  test("Test - Single Expression", function () {
5
5
  testSingleCase(chrono.zh.hant, "星期四", new Date(2016, 9 - 1, 2), (result) => {
@@ -16,3 +16,21 @@ test("Test - International compatible", () => {
16
16
  expect(result.start).toBeDate(new Date(784043130000));
17
17
  });
18
18
  });
19
+
20
+ test("Test - Default Zh setting combine both hans/hant", () => {
21
+ testSingleCase(chrono.zh, "明天早上8点", new Date(2012, 8 - 1, 8, 12), (result) => {
22
+ expect(result.text).toBe("明天早上8点");
23
+ expect(result.start.get("year")).toBe(2012);
24
+ expect(result.start.get("month")).toBe(8);
25
+ expect(result.start.get("day")).toBe(9);
26
+ expect(result.start.get("hour")).toBe(8);
27
+ });
28
+
29
+ testSingleCase(chrono.zh, "明天早上8點", new Date(2012, 8 - 1, 8, 12), (result) => {
30
+ expect(result.text).toBe("明天早上8點");
31
+ expect(result.start.get("year")).toBe(2012);
32
+ expect(result.start.get("month")).toBe(8);
33
+ expect(result.start.get("day")).toBe(9);
34
+ expect(result.start.get("hour")).toBe(8);
35
+ });
36
+ });
@@ -1 +0,0 @@
1
- {"version":3,"file":"ENCasualYearMonthDayParser.js","sourceRoot":"","sources":["../../../../../src/locales/en/parsers/ENCasualYearMonthDayParser.ts"],"names":[],"mappings":";;AACA,4CAAgD;AAChD,oDAAyD;AACzD,2GAAgH;AAShH,MAAM,OAAO,GAAG,IAAI,MAAM,CACtB,uBAAuB;IACnB,OAAO,yBAAe,CAAC,4BAAgB,CAAC,4BAA4B;IACpE,cAAc;IACd,WAAW,EACf,GAAG,CACN,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAqB,0BAA2B,SAAQ,uEAAsC;IAC1F,YAAY;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;YACnC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrC,CAAC,CAAC,4BAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAE9D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC;SACf;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAE/C,OAAO;YACH,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;SACb,CAAC;IACN,CAAC;CACJ;AAvBD,6CAuBC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ENCasualYearMonthDayParser.js","sourceRoot":"","sources":["../../../../../src/locales/en/parsers/ENCasualYearMonthDayParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,sCAAsC,EAAE,MAAM,wDAAwD,CAAC;AAShH,MAAM,OAAO,GAAG,IAAI,MAAM,CACtB,uBAAuB;IACnB,OAAO,eAAe,CAAC,gBAAgB,CAAC,4BAA4B;IACpE,cAAc;IACd,WAAW,EACf,GAAG,CACN,CAAC;AAEF,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAC3B,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAC7B,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAE5B,MAAM,CAAC,OAAO,OAAO,0BAA2B,SAAQ,sCAAsC;IAC1F,YAAY;QACR,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,YAAY,CAAC,OAAuB,EAAE,KAAuB;QACzD,MAAM,KAAK,GAAG,KAAK,CAAC,kBAAkB,CAAC;YACnC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACrC,CAAC,CAAC,gBAAgB,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAE9D,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE;YACzB,OAAO,IAAI,CAAC;SACf;QAED,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;QAE/C,OAAO;YACH,GAAG,EAAE,GAAG;YACR,KAAK,EAAE,KAAK;YACZ,IAAI,EAAE,IAAI;SACb,CAAC;IACN,CAAC;CACJ"}