chrono-node 2.7.9 → 2.8.0

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 (34) hide show
  1. package/dist/cjs/common/casualReferences.js +8 -10
  2. package/dist/cjs/common/casualReferences.js.map +1 -1
  3. package/dist/cjs/common/refiners/ForwardDateRefiner.js +33 -12
  4. package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
  5. package/dist/cjs/results.d.ts +1 -0
  6. package/dist/cjs/results.js +18 -13
  7. package/dist/cjs/results.js.map +1 -1
  8. package/dist/cjs/utils/dates.d.ts +3 -0
  9. package/dist/cjs/utils/dates.js +17 -0
  10. package/dist/cjs/utils/dates.js.map +1 -0
  11. package/dist/cjs/utils/dayjs.js.map +1 -1
  12. package/dist/esm/common/casualReferences.js +8 -10
  13. package/dist/esm/common/casualReferences.js.map +1 -1
  14. package/dist/esm/common/refiners/ForwardDateRefiner.js +14 -12
  15. package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
  16. package/dist/esm/results.d.ts +1 -0
  17. package/dist/esm/results.js +17 -13
  18. package/dist/esm/results.js.map +1 -1
  19. package/dist/esm/utils/dates.d.ts +3 -0
  20. package/dist/esm/utils/dates.js +12 -0
  21. package/dist/esm/utils/dates.js.map +1 -0
  22. package/dist/esm/utils/dayjs.js.map +1 -1
  23. package/package.json +1 -1
  24. package/src/common/casualReferences.ts +8 -10
  25. package/src/common/refiners/ForwardDateRefiner.ts +17 -11
  26. package/src/results.ts +18 -13
  27. package/src/utils/dates.ts +24 -0
  28. package/src/utils/dayjs.ts +6 -0
  29. package/test/en/en_casual.test.ts +4 -1
  30. package/test/en/en_relative.test.ts +126 -39
  31. package/test/en/en_time_exp.test.ts +27 -18
  32. package/test/nl/nl_relative.test.ts +33 -17
  33. package/test/result.test.ts +24 -0
  34. package/test/system_timezone.test.ts +20 -4
@@ -185,42 +185,58 @@ test("Test - Relative date components' certainty", () => {
185
185
  });
186
186
  });
187
187
 
188
- test("Test - Relative date components' certainty and imply timezone", () => {
188
+ test("Test - Relative date when the timezone is irrelevant", () => {
189
189
  const refDate = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
190
-
191
190
  {
192
191
  // now
193
192
  const text = "nu";
194
193
  const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
194
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)"));
195
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 5:24:13 GMT+0100"));
195
196
 
196
- expect(result.text).toBe(text);
197
197
  result.start.imply("timezoneOffset", 60);
198
-
199
198
  expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)"));
200
199
  expect(result).toBeDate(new Date("Sun Nov 29 2020 5:24:13 GMT+0100"));
201
200
  }
202
-
203
201
  {
204
- // tomorrow at 5pm
205
- const text = "morgen om 17 uur";
202
+ // in 10 minutes
203
+ const text = "binnen 10 minuten";
206
204
  const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
205
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
206
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
207
207
 
208
- expect(result.text).toBe(text);
209
208
  result.start.imply("timezoneOffset", 60);
210
-
211
- expect(result).toBeDate(new Date("Sun Dec 1 2020 1:00:00 GMT+0900 (Japan Standard Time)"));
212
- expect(result).toBeDate(new Date("Sun Nov 30 2020 17:00:00 GMT+0100"));
209
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
210
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
213
211
  }
212
+ });
214
213
 
214
+ test("Test - Relative date when the timezone is relevant and known", () => {
215
+ // Sun Nov 29 2020 13:24:13 GMT+0900 (JST)
216
+ // Sat Nov 28 2020 21:24:13 GMT-0700 (PDT)
217
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
215
218
  {
216
- // in 10 minutes
217
- const text = "binnen 10 minuten";
218
- const result = chrono.nl.parse(text, refDate)[0] as ParsingResult;
219
+ // In JST (Nov 29 2020 13:24:13 GMT+0900), "tomorrow at 5pm"
220
+ const text = "morgen om 17 uur";
221
+ const result = chrono.nl.parse(text, { instant: refInstant, timezone: "JST" })[0] as ParsingResult;
222
+ expect(result).toBeDate(new Date("Mon Nov 30 2020 17:00:00 GMT+0900 (JST)"));
223
+ expect(result.start.get("month")).toBe(11);
224
+ expect(result.start.get("day")).toBe(30);
225
+ expect(result.start.get("hour")).toBe(17);
219
226
 
220
- expect(result.text).toBe(text);
221
227
  result.start.imply("timezoneOffset", 60);
228
+ expect(result).toBeDate(new Date("Mon Nov 30 2020 17:00:00 GMT+0100 (BST)"));
229
+ }
230
+ {
231
+ // In PDT (Sat Nov 28 2020 21:24:13 GMT-0700), "tomorrow at 5pm"
232
+ const text = "morgen om 17 uur";
233
+ const result = chrono.nl.parse(text, { instant: refInstant, timezone: -7 * 60 })[0] as ParsingResult;
234
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 17:00:00 GMT-0700 (PST)"));
235
+ expect(result.start.get("month")).toBe(11);
236
+ expect(result.start.get("day")).toBe(29);
237
+ expect(result.start.get("hour")).toBe(17);
222
238
 
223
- expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
224
- expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
239
+ result.start.imply("timezoneOffset", 60);
240
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 17:00:00 GMT+0100 (BST)"));
225
241
  }
226
242
  });
@@ -175,3 +175,27 @@ test("Test - Checking non-existing date during DST skip", () => {
175
175
  ).toBe(true);
176
176
  }
177
177
  });
178
+
179
+ test("Test - Getting timezone adjust date from references", () => {
180
+ {
181
+ const reference = new ReferenceWithTimezone({
182
+ instant: new Date("Wed Jun 09 2021 07:21:32 GMT+0900 (JST)"),
183
+ timezone: 9 * 60,
184
+ });
185
+ expect(reference.getDateWithAdjustedTimezone()).toStrictEqual(new Date(2021, 6 - 1, 9, 7, 21, 32));
186
+ }
187
+ {
188
+ const reference = new ReferenceWithTimezone({
189
+ instant: new Date("Wed Jun 09 2021 07:21:32 GMT+0900 (JST)"),
190
+ timezone: "JST",
191
+ });
192
+ expect(reference.getDateWithAdjustedTimezone()).toStrictEqual(new Date(2021, 6 - 1, 9, 7, 21, 32));
193
+ }
194
+ {
195
+ const reference = new ReferenceWithTimezone({
196
+ instant: new Date("Wed Jun 09 2021 07:21:32 GMT-0500 (CDT)"),
197
+ timezone: "CDT",
198
+ });
199
+ expect(reference.getDateWithAdjustedTimezone()).toStrictEqual(new Date(2021, 6 - 1, 9, 7, 21, 32));
200
+ }
201
+ });
@@ -1,7 +1,7 @@
1
1
  import * as chrono from "../src/";
2
2
  import { testSingleCase } from "./test_util";
3
3
 
4
- test("Test - Timezone difference on reference example", function () {
4
+ test("Test - Using reference with timezone", function () {
5
5
  testSingleCase(
6
6
  chrono,
7
7
  "Friday at 4pm",
@@ -11,12 +11,26 @@ test("Test - Timezone difference on reference example", function () {
11
11
  },
12
12
  (result) => {
13
13
  expect(result).toBeDate(new Date("Fri Jun 11 2021 16:00:00 GMT-0500 (CDT)"));
14
- expect(result).toBeDate(new Date("Fri Jun 12 2021 06:00:00 GMT+0900 (JST)"));
14
+ expect(result).toBeDate(new Date("Sat Jun 12 2021 06:00:00 GMT+0900 (JST)"));
15
+ }
16
+ );
17
+ testSingleCase(
18
+ chrono,
19
+ "1am",
20
+ {
21
+ instant: new Date("Wed May 26 2022 01:57:00 GMT-0500 (CDT)"),
22
+ timezone: "CDT",
23
+ },
24
+ (result) => {
25
+ expect(result.start.get("year")).toBe(2022);
26
+ expect(result.start.get("month")).toBe(5);
27
+ expect(result.start.get("day")).toBe(26);
28
+ expect(result.start.get("hour")).toBe(1);
15
29
  }
16
30
  );
17
31
  });
18
32
 
19
- test("Test - Timezone difference on default timezone", function () {
33
+ test("Test - Using reference with missing/default timezone", function () {
20
34
  const INPUT = "Friday at 4pm";
21
35
  const REF_INSTANT = new Date(2021, 6 - 1, 9, 7, 0, 0);
22
36
  const EXPECTED_INSTANT = new Date(2021, 6 - 1, 11, 16, 0, 0);
@@ -38,16 +52,18 @@ test("Test - Timezone difference on default timezone", function () {
38
52
  });
39
53
  });
40
54
 
41
- test("Test - Timezone difference on reference date", function () {
55
+ test("Test - Using reference instance with different timezone", function () {
42
56
  // Sun Jun 06 2021 19:00:00 GMT+0900 (JST)
43
57
  // Sun Jun 06 2021 11:00:00 GMT+0100 (BST)
44
58
  const refInstant = new Date("Sun Jun 06 2021 19:00:00 GMT+0900 (JST)");
45
59
 
60
+ // "At 4pm tomorrow" at "Sun Jun 06 2021 11:00:00 (BST)"
46
61
  testSingleCase(chrono, "At 4pm tomorrow", { instant: refInstant, timezone: "BST" }, (result) => {
47
62
  const expectedInstant = new Date("Mon Jun 07 2021 16:00:00 GMT+0100 (BST)");
48
63
  expect(result).toBeDate(expectedInstant);
49
64
  });
50
65
 
66
+ // "At 4pm tomorrow" at "Sun Jun 06 2021 19:00:00 (JST)"
51
67
  testSingleCase(chrono, "At 4pm tomorrow", { instant: refInstant, timezone: "JST" }, (result) => {
52
68
  const expectedInstant = new Date("Mon Jun 07 2021 16:00:00 GMT+0900 (JST)");
53
69
  expect(result).toBeDate(expectedInstant);