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
@@ -1 +1 @@
1
- {"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/results.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"results.js","sourceRoot":"","sources":["../../src/results.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ParsingComponents } from "../results.js";
2
+ export declare function implySimilarDate(component: ParsingComponents, target: Date): void;
3
+ export declare function implySimilarTime(component: ParsingComponents, target: Date): void;
@@ -0,0 +1,12 @@
1
+ export function implySimilarDate(component, target) {
2
+ component.imply("day", target.getDate());
3
+ component.imply("month", target.getMonth() + 1);
4
+ component.imply("year", target.getFullYear());
5
+ }
6
+ export function implySimilarTime(component, target) {
7
+ component.imply("hour", target.getHours());
8
+ component.imply("minute", target.getMinutes());
9
+ component.imply("second", target.getSeconds());
10
+ component.imply("millisecond", target.getMilliseconds());
11
+ }
12
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/utils/dates.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,MAAY;IACvE,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AAClD,CAAC;AAOD,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,MAAY;IACvE,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/C,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/C,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC;AAC7D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dayjs.js","sourceRoot":"","sources":["../../../src/utils/dayjs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC1C,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAA4B,EAAE,WAAwB;IAClF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE;QAC5B,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;SAAM;QACH,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9D,CAAC"}
1
+ {"version":3,"file":"dayjs.js","sourceRoot":"","sources":["../../../src/utils/dayjs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,iBAAiB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAC1C,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAA4B,EAAE,WAAwB;IAClF,WAAW,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACxC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IACnD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,SAA4B,EAAE,WAAwB;IACpF,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7C,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;IAC3D,IAAI,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE;QAC5B,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;SAAM;QACH,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;KAC7C;AACL,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,SAAS,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC3C,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAClD,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;AAChD,CAAC;AAKD,MAAM,UAAU,gBAAgB,CAAC,SAA4B,EAAE,WAAwB;IACnF,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;AAC9D,CAAC"}
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "preset": "ts-jest"
16
16
  },
17
17
  "license": "MIT",
18
- "version": "2.7.9",
18
+ "version": "2.8.0",
19
19
  "directories": {
20
20
  "source": "./src",
21
21
  "test": "./test"
@@ -10,19 +10,17 @@ import {
10
10
  import { Meridiem } from "../types";
11
11
 
12
12
  export function now(reference: ReferenceWithTimezone): ParsingComponents {
13
- const targetDate = dayjs(reference.instant);
13
+ const targetDate = dayjs(reference.getDateWithAdjustedTimezone());
14
14
  const component = new ParsingComponents(reference, {});
15
15
  assignSimilarDate(component, targetDate);
16
16
  assignSimilarTime(component, targetDate);
17
- if (reference.timezoneOffset !== null) {
18
- component.assign("timezoneOffset", targetDate.utcOffset());
19
- }
17
+ component.assign("timezoneOffset", reference.getTimezoneOffset());
20
18
  component.addTag("casualReference/now");
21
19
  return component;
22
20
  }
23
21
 
24
22
  export function today(reference: ReferenceWithTimezone): ParsingComponents {
25
- const targetDate = dayjs(reference.instant);
23
+ const targetDate = dayjs(reference.getDateWithAdjustedTimezone());
26
24
  const component = new ParsingComponents(reference, {});
27
25
  assignSimilarDate(component, targetDate);
28
26
  implySimilarTime(component, targetDate);
@@ -49,7 +47,7 @@ export function tomorrow(reference: ReferenceWithTimezone): ParsingComponents {
49
47
  }
50
48
 
51
49
  export function theDayAfter(reference: ReferenceWithTimezone, nDays: number): ParsingComponents {
52
- let targetDate = dayjs(reference.instant);
50
+ let targetDate = dayjs(reference.getDateWithAdjustedTimezone());
53
51
  const component = new ParsingComponents(reference, {});
54
52
  targetDate = targetDate.add(nDays, "day");
55
53
  assignSimilarDate(component, targetDate);
@@ -58,7 +56,7 @@ export function theDayAfter(reference: ReferenceWithTimezone, nDays: number): Pa
58
56
  }
59
57
 
60
58
  export function tonight(reference: ReferenceWithTimezone, implyHour = 22): ParsingComponents {
61
- const targetDate = dayjs(reference.instant);
59
+ const targetDate = dayjs(reference.getDateWithAdjustedTimezone());
62
60
  const component = new ParsingComponents(reference, {});
63
61
  assignSimilarDate(component, targetDate);
64
62
  component.imply("hour", implyHour);
@@ -68,7 +66,7 @@ export function tonight(reference: ReferenceWithTimezone, implyHour = 22): Parsi
68
66
  }
69
67
 
70
68
  export function lastNight(reference: ReferenceWithTimezone, implyHour = 0): ParsingComponents {
71
- let targetDate = dayjs(reference.instant);
69
+ let targetDate = dayjs(reference.getDateWithAdjustedTimezone());
72
70
  const component = new ParsingComponents(reference, {});
73
71
  if (targetDate.hour() < 6) {
74
72
  targetDate = targetDate.add(-1, "day");
@@ -87,7 +85,7 @@ export function evening(reference: ReferenceWithTimezone, implyHour = 20): Parsi
87
85
  }
88
86
 
89
87
  export function yesterdayEvening(reference: ReferenceWithTimezone, implyHour = 20): ParsingComponents {
90
- let targetDate = dayjs(reference.instant);
88
+ let targetDate = dayjs(reference.getDateWithAdjustedTimezone());
91
89
  const component = new ParsingComponents(reference, {});
92
90
  targetDate = targetDate.add(-1, "day");
93
91
  assignSimilarDate(component, targetDate);
@@ -100,7 +98,7 @@ export function yesterdayEvening(reference: ReferenceWithTimezone, implyHour = 2
100
98
 
101
99
  export function midnight(reference: ReferenceWithTimezone): ParsingComponents {
102
100
  const component = new ParsingComponents(reference, {});
103
- const targetDate = dayjs(reference.instant);
101
+ const targetDate = dayjs(reference.getDateWithAdjustedTimezone());
104
102
  if (targetDate.hour() > 2) {
105
103
  // Unless it's very early morning (0~2AM), we assume the midnight is the coming midnight.
106
104
  // Thus, increasing the day by 1.
@@ -8,6 +8,7 @@ import { ParsingContext, Refiner } from "../../chrono";
8
8
  import { ParsingResult } from "../../results";
9
9
  import dayjs from "dayjs";
10
10
  import { implySimilarDate } from "../../utils/dayjs";
11
+ import * as dates from "../../utils/dates";
11
12
 
12
13
  export default class ForwardDateRefiner implements Refiner {
13
14
  refine(context: ParsingContext, results: ParsingResult[]): ParsingResult[] {
@@ -16,21 +17,26 @@ export default class ForwardDateRefiner implements Refiner {
16
17
  }
17
18
 
18
19
  results.forEach((result) => {
19
- let refMoment = dayjs(context.refDate);
20
+ let refMoment = dayjs(context.reference.getDateWithAdjustedTimezone());
20
21
 
21
- if (result.start.isOnlyTime() && refMoment.isAfter(result.start.dayjs())) {
22
- refMoment = refMoment.add(1, "day");
23
- implySimilarDate(result.start, refMoment);
22
+ if (result.start.isOnlyTime() && context.reference.instant > result.start.date()) {
23
+ const refDate = context.reference.getDateWithAdjustedTimezone();
24
+ const refFollowingDay = new Date(refDate);
25
+ refFollowingDay.setDate(refFollowingDay.getDate() + 1);
26
+
27
+ dates.implySimilarDate(result.start, refFollowingDay);
28
+ context.debug(() => {
29
+ console.log(
30
+ `${this.constructor.name} adjusted ${result} time from the ref date (${refDate}) to the following day (${refFollowingDay})`
31
+ );
32
+ });
24
33
  if (result.end && result.end.isOnlyTime()) {
25
- implySimilarDate(result.end, refMoment);
26
- if (result.start.dayjs().isAfter(result.end.dayjs())) {
27
- refMoment = refMoment.add(1, "day");
28
- implySimilarDate(result.end, refMoment);
34
+ dates.implySimilarDate(result.end, refFollowingDay);
35
+ if (result.start.date() > result.end.date()) {
36
+ refFollowingDay.setDate(refFollowingDay.getDate() + 1);
37
+ dates.implySimilarDate(result.end, refFollowingDay);
29
38
  }
30
39
  }
31
- context.debug(() => {
32
- console.log(`${this.constructor.name} adjusted ${result} time result (${result.start})`);
33
- });
34
40
  }
35
41
 
36
42
  if (result.start.isOnlyWeekdayComponent() && refMoment.isAfter(result.start.dayjs())) {
package/src/results.ts CHANGED
@@ -14,6 +14,7 @@ export class ReferenceWithTimezone {
14
14
  input = input ?? new Date();
15
15
  if (input instanceof Date) {
16
16
  this.instant = input;
17
+ this.timezoneOffset = null;
17
18
  } else {
18
19
  this.instant = input.instant ?? new Date();
19
20
  this.timezoneOffset = toTimezoneOffset(input.timezone, this.instant);
@@ -25,7 +26,11 @@ export class ReferenceWithTimezone {
25
26
  * The output's instant is NOT the reference's instant when the reference's and system's timezone are different.
26
27
  */
27
28
  getDateWithAdjustedTimezone() {
28
- return new Date(this.instant.getTime() + this.getSystemTimezoneAdjustmentMinute(this.instant) * 60000);
29
+ const date = new Date(this.instant);
30
+ if (this.timezoneOffset !== null) {
31
+ date.setMinutes(date.getMinutes() - this.getSystemTimezoneAdjustmentMinute(this.instant));
32
+ }
33
+ return date;
29
34
  }
30
35
 
31
36
  /**
@@ -44,6 +49,10 @@ export class ReferenceWithTimezone {
44
49
  const targetTimezoneOffset = overrideTimezoneOffset ?? this.timezoneOffset ?? currentTimezoneOffset;
45
50
  return currentTimezoneOffset - targetTimezoneOffset;
46
51
  }
52
+
53
+ getTimezoneOffset(): number {
54
+ return this.timezoneOffset ?? -this.instant.getTimezoneOffset();
55
+ }
47
56
  }
48
57
 
49
58
  export class ParsingComponents implements ParsedComponents {
@@ -62,10 +71,10 @@ export class ParsingComponents implements ParsedComponents {
62
71
  }
63
72
  }
64
73
 
65
- const refDayJs = dayjs(reference.instant);
66
- this.imply("day", refDayJs.date());
67
- this.imply("month", refDayJs.month() + 1);
68
- this.imply("year", refDayJs.year());
74
+ const refDayJs = reference.getDateWithAdjustedTimezone();
75
+ this.imply("day", refDayJs.getDate());
76
+ this.imply("month", refDayJs.getMonth() + 1);
77
+ this.imply("year", refDayJs.getFullYear());
69
78
  this.imply("hour", 12);
70
79
  this.imply("minute", 0);
71
80
  this.imply("second", 0);
@@ -166,7 +175,7 @@ export class ParsingComponents implements ParsedComponents {
166
175
  }
167
176
 
168
177
  dayjs() {
169
- return dayjs(this.date());
178
+ return dayjs(this.dateWithoutTimezoneAdjustment());
170
179
  }
171
180
 
172
181
  date(): Date {
@@ -210,7 +219,7 @@ export class ParsingComponents implements ParsedComponents {
210
219
  reference: ReferenceWithTimezone,
211
220
  fragments: { [c in QUnitType]?: number }
212
221
  ): ParsingComponents {
213
- let date = dayjs(reference.instant);
222
+ let date = dayjs(reference.getDateWithAdjustedTimezone());
214
223
  for (const key in fragments) {
215
224
  date = date.add(fragments[key as QUnitType], key as QUnitType);
216
225
  }
@@ -221,14 +230,10 @@ export class ParsingComponents implements ParsedComponents {
221
230
  components.addTag("result/relativeDateAndTime");
222
231
  assignSimilarTime(components, date);
223
232
  assignSimilarDate(components, date);
224
- if (reference.timezoneOffset !== null) {
225
- components.assign("timezoneOffset", -reference.instant.getTimezoneOffset());
226
- }
233
+ components.assign("timezoneOffset", reference.getTimezoneOffset());
227
234
  } else {
228
235
  implySimilarTime(components, date);
229
- if (reference.timezoneOffset !== null) {
230
- components.imply("timezoneOffset", -reference.instant.getTimezoneOffset());
231
- }
236
+ components.imply("timezoneOffset", reference.getTimezoneOffset());
232
237
 
233
238
  if (fragments["d"]) {
234
239
  components.assign("day", date.date());
@@ -0,0 +1,24 @@
1
+ import { ParsingComponents } from "../results";
2
+
3
+ /**
4
+ * Imply (weakly update) the parsing component to the same day as the `target`.
5
+ * @param component the component to be updated.
6
+ * @param target the target date with timezone adjusted.
7
+ */
8
+ export function implySimilarDate(component: ParsingComponents, target: Date) {
9
+ component.imply("day", target.getDate());
10
+ component.imply("month", target.getMonth() + 1);
11
+ component.imply("year", target.getFullYear());
12
+ }
13
+
14
+ /**
15
+ * Imply (weakly update) the parsing component to the same time as the `target`.
16
+ * @param component the component to be updated.
17
+ * @param target the target date with timezone adjusted.
18
+ */
19
+ export function implySimilarTime(component: ParsingComponents, target: Date) {
20
+ component.imply("hour", target.getHours());
21
+ component.imply("minute", target.getMinutes());
22
+ component.imply("second", target.getSeconds());
23
+ component.imply("millisecond", target.getMilliseconds());
24
+ }
@@ -32,12 +32,18 @@ export function assignSimilarTime(component: ParsingComponents, targetDayJs: day
32
32
  }
33
33
  }
34
34
 
35
+ /**
36
+ * @deprecated Use `dates.implySimilarDate` with normal Javascript Date instead.
37
+ */
35
38
  export function implySimilarDate(component: ParsingComponents, targetDayJs: dayjs.Dayjs) {
36
39
  component.imply("day", targetDayJs.date());
37
40
  component.imply("month", targetDayJs.month() + 1);
38
41
  component.imply("year", targetDayJs.year());
39
42
  }
40
43
 
44
+ /**
45
+ * @deprecated Use `dates.implySimilarTime` with normal Javascript Date instead.
46
+ */
41
47
  export function implySimilarTime(component: ParsingComponents, targetDayJs: dayjs.Dayjs) {
42
48
  component.imply("hour", targetDayJs.hour());
43
49
  component.imply("minute", targetDayJs.minute());
@@ -28,7 +28,10 @@ test("Test - Single Expression", () => {
28
28
  (result) => {
29
29
  expect(result.text).toBe("now");
30
30
  expect(result.start).toBeDate(new Date(1637674343000));
31
- expect(result.start.isCertain("timezoneOffset")).toBe(false);
31
+
32
+ // Although the timezone is not specified, we need to assume it is similar to the system default.
33
+ // We also must allow the timezoneOffset to be overridden. Otherwise, the "now" meaning is incorrect.
34
+ // expect(result.start.isCertain("timezoneOffset")).toBe(false);
32
35
  }
33
36
  );
34
37
 
@@ -238,69 +238,156 @@ test("Test - Relative date components' certainty", () => {
238
238
  });
239
239
  });
240
240
 
241
- test("Test - Relative date components' certainty and imply timezone", () => {
242
- const refDate = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
243
-
241
+ test("Test - Relative date when the timezone is irrelevant", () => {
244
242
  {
243
+ // Sun Nov 29 2020 13:24:13 GMT+0900 (JST)
244
+ // Sun Nov 29 2020 05:24:13 GMT+0100 (BST)
245
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
246
+
247
+ // The "now" is always exactly the same as the reference instant (regardless of the timezone).
245
248
  const text = "now";
246
- const result = chrono.parse(text, refDate)[0] as ParsingResult;
249
+ const result = chrono.parse(text, refInstant)[0] as ParsingResult;
250
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (JST)"));
251
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 05:24:13 GMT+0100 (BST)"));
247
252
 
248
- expect(result.text).toBe(text);
249
253
  result.start.imply("timezoneOffset", 60);
250
-
251
- expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)"));
252
- expect(result).toBeDate(new Date("Sun Nov 29 2020 5:24:13 GMT+0100"));
254
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (JST)"));
255
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 05:24:13 GMT+0100 (BST)"));
253
256
  }
254
-
255
257
  {
256
- const text = "tomorrow at 5pm";
257
- const result = chrono.parse(text, refDate)[0] as ParsingResult;
258
+ // Sun Nov 29 2020 13:24:13 GMT+0900 (JST)
259
+ // Sun Nov 29 2020 05:24:13 GMT+0100 (BST)
260
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
258
261
 
259
- expect(result.text).toBe(text);
260
- result.start.imply("timezoneOffset", 60);
262
+ // Always "10 minutes" from the reference instant (regardless of the target timezone).
263
+ const text = "in 10 minutes";
264
+ const result = chrono.parse(text, refInstant)[0] as ParsingResult;
265
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (JST)"));
266
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 05:34:13 GMT+0100 (BST)"));
261
267
 
262
- expect(result).toBeDate(new Date("Sun Dec 1 2020 1:00:00 GMT+0900 (Japan Standard Time)"));
263
- expect(result).toBeDate(new Date("Sun Nov 30 2020 17:00:00 GMT+0100"));
268
+ result.start.imply("timezoneOffset", 60);
269
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (JST)"));
270
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 05:34:13 GMT+0100 (BST)"));
264
271
  }
265
-
266
272
  {
273
+ // Sun Nov 29 2020 13:24:13 GMT+0900 (JST)
274
+ // Sun Nov 29 2020 05:24:13 GMT+0100 (BST)
275
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
276
+
277
+ // Always "10 minutes" from the reference instant (regardless of the reference timezone).
267
278
  const text = "in 10 minutes";
268
- const result = chrono.parse(text, refDate)[0] as ParsingResult;
279
+ {
280
+ const result = chrono.parse(text, { instant: refInstant, timezone: "BST" })[0] as ParsingResult;
281
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (JST)"));
282
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 05:34:13 GMT+0100 (BST)"));
283
+ }
284
+ {
285
+ const result = chrono.parse(text, { instant: refInstant, timezone: "JST" })[0] as ParsingResult;
286
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (JST)"));
287
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 05:34:13 GMT+0100 (BST)"));
288
+ }
289
+ }
290
+ {
291
+ // Sun Nov 29 2020 13:24:13 GMT+0900 (JST)
292
+ // Sun Nov 29 2020 05:24:13 GMT+0100 (BST)
293
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
269
294
 
270
- expect(result.text).toBe(text);
271
- result.start.imply("timezoneOffset", 60);
295
+ const text = "in 20 minutes";
296
+ const result = chrono.parse(text, { instant: refInstant, timezone: null })[0] as ParsingResult;
297
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 13:44:13 GMT+0900 (JST)"));
298
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 05:44:13 GMT+0100 (BST)"));
272
299
 
273
- expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
274
- expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
300
+ // Although the timezone is not specified, we need to assume it is similar to the system default.
301
+ // We also must allow the timezoneOffset to be overridden. Otherwise, the relative meaning is incorrect.
302
+ // expect(result.start.isCertain("timezoneOffset")).toBe(false);
275
303
  }
304
+ });
276
305
 
306
+ test("Test - Relative date when the timezone is relevant but unknown", () => {
307
+ // Sun Nov 29 2020 13:24:13 (unknown timezone = system timezone)
308
+ const refInstant = new Date(2020, 11 - 1, 29, 13, 24, 13, 0);
309
+
310
+ // In the same (system) timezone, the "tomorrow" is 'Nov 30 2020'
311
+ const text = "tomorrow at 5pm";
312
+ const result = chrono.parse(text, refInstant)[0] as ParsingResult;
313
+ expect(result).toBeDate(new Date(2020, 11 - 1, 30, 17, 0, 0, 0));
314
+ expect(result.start.get("month")).toBe(11);
315
+ expect(result.start.get("day")).toBe(30);
316
+ expect(result.start.get("hour")).toBe(17);
317
+ });
318
+
319
+ test("Test - Relative date when the timezone is relevant and known", () => {
320
+ // Sun Nov 29 2020 13:24:13 GMT+0900 (JST)
321
+ // Sun Nov 29 2020 05:24:13 GMT+0100 (BST)
322
+ // Sat Nov 28 2020 21:24:13 GMT-0700 (PDT)
323
+ const refInstant = new Date("Sun Nov 29 2020 13:24:13 GMT+0900 (Japan Standard Time)");
277
324
  {
278
- const text = "in 10 minutes";
279
- const result = chrono.parse(text, { instant: refDate, timezone: "BST" })[0] as ParsingResult;
325
+ // In JST (Nov 29 2020 13:24:13 GMT+0900), the "tomorrow" is 'Nov 30 2020'
326
+ const text = "tomorrow at 5pm";
327
+ const result = chrono.parse(text, { instant: refInstant, timezone: "JST" })[0] as ParsingResult;
328
+ expect(result).toBeDate(new Date("Mon Nov 30 2020 17:00:00 GMT+0900 (JST)"));
329
+ expect(result.start.get("month")).toBe(11);
330
+ expect(result.start.get("day")).toBe(30);
331
+ expect(result.start.get("hour")).toBe(17);
280
332
 
281
- expect(result.text).toBe(text);
333
+ // However, when implying the output timezone to be GMT+0100,
282
334
  result.start.imply("timezoneOffset", 60);
283
-
284
- expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
285
- expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
335
+ expect(result).toBeDate(new Date("Mon Nov 30 2020 17:00:00 GMT+0100 (BST)"));
286
336
  }
287
-
288
337
  {
289
- const text = "in 10 minutes";
290
- const result = chrono.parse(text, { instant: refDate, timezone: "JST" })[0] as ParsingResult;
338
+ // In BST (Nov 29 2020 05:24:13 GMT+0100), the "tomorrow" is 'Nov 30 2020'
339
+ const text = "tomorrow at 5pm";
340
+ const result = chrono.parse(text, { instant: refInstant, timezone: "BST" })[0] as ParsingResult;
341
+ expect(result).toBeDate(new Date("Mon Nov 30 2020 17:00:00 GMT+0100 (BST)"));
342
+ expect(result.start.get("month")).toBe(11);
343
+ expect(result.start.get("day")).toBe(30);
344
+ expect(result.start.get("hour")).toBe(17);
291
345
 
292
- expect(result.text).toBe(text);
293
- result.start.imply("timezoneOffset", 60);
346
+ // However, when implying the output timezone to be GMT+0900,
347
+ result.start.imply("timezoneOffset", 540);
348
+ expect(result).toBeDate(new Date("Mon Nov 30 2020 17:00:00 GMT+0900 (JST)"));
349
+ }
350
+ {
351
+ // In PST (Sat Nov 28 2020 21:24:13 GMT-0700), the "tomorrow" is 'Nov 29 2020'
352
+ const text = "tomorrow at 5pm";
353
+ const result = chrono.parse(text, { instant: refInstant, timezone: -7 * 60 })[0] as ParsingResult;
354
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 17:00:00 GMT-0700 (PST)"));
355
+ expect(result.start.get("month")).toBe(11);
356
+ expect(result.start.get("day")).toBe(29);
357
+ expect(result.start.get("hour")).toBe(17);
294
358
 
295
- expect(result).toBeDate(new Date("Sun Nov 29 2020 13:34:13 GMT+0900 (Japan Standard Time)"));
296
- expect(result).toBeDate(new Date("Sun Nov 29 2020 5:34:13 GMT+0100"));
359
+ // However, when implying the output timezone to be GMT+0900,
360
+ result.start.imply("timezoneOffset", 540);
361
+ expect(result).toBeDate(new Date("Sun Nov 29 2020 17:00:00 GMT+0900 (JST)"));
297
362
  }
363
+ });
298
364
 
365
+ test("Test - Relative date when the timezone is relevant and known (2nd scenario)", () => {
366
+ // Thu Feb 27 2025 17:00:00 GMT+0000
367
+ // Thu Feb 27 2025 09:00:00 GMT-0800 (PST)
368
+ const refInstant = new Date("2025-02-27T17:00:00.000Z");
299
369
  {
300
- const text = "in 20 minutes";
301
- const result = chrono.parse(text, { instant: refDate, timezone: null })[0] as ParsingResult;
302
-
303
- expect(result.text).toBe(text);
304
- expect(result.start.isCertain("timezoneOffset")).toBe(false);
370
+ const text = "tomorrow at 9am";
371
+ const result = chrono.parse(text, { instant: refInstant, timezone: "PST" })[0] as ParsingResult;
372
+ expect(result).toBeDate(new Date("Fri Feb 28 2025 09:00:00 GMT-0800 (PST)"));
373
+ expect(result).toBeDate(new Date("2025-02-28T17:00:00.000Z"));
374
+ }
375
+ {
376
+ const text = "in 2 weeks at 9am";
377
+ const result = chrono.parse(text, { instant: refInstant, timezone: "PST" })[0] as ParsingResult;
378
+ expect(result).toBeDate(new Date("Thu Mar 13 2025 09:00:00 GMT-0800 (PST)"));
379
+ expect(result).toBeDate(new Date("2025-03-13T17:00:00.000Z"));
380
+ }
381
+ {
382
+ const text = "2 weeks ago at 9am";
383
+ const result = chrono.parse(text, { instant: refInstant, timezone: "PST" })[0] as ParsingResult;
384
+ expect(result).toBeDate(new Date("Thu Feb 13 2025 09:00:00 GMT-0800 (PST)"));
385
+ expect(result).toBeDate(new Date("2025-02-13T17:00:00.000Z"));
386
+ }
387
+ {
388
+ const text = "next friday at 9am";
389
+ const result = chrono.parse(text, { instant: refInstant, timezone: "PST" })[0] as ParsingResult;
390
+ expect(result).toBeDate(new Date("Fri Mar 07 2025 09:00:00 GMT-0800 (PST)"));
391
+ expect(result).toBeDate(new Date("2025-03-07T17:00:00.000Z"));
305
392
  }
306
393
  });
@@ -456,24 +456,13 @@ test("Test - Parsing negative cases : 'at [some numbers] - [some numbers]' (Stri
456
456
  testUnexpectedResult(chrono.strict, "7-730");
457
457
  });
458
458
 
459
- test("Test - forward dates only option", function () {
460
- testSingleCase(
461
- chrono,
462
- "1am",
463
- {
464
- instant: new Date("Wed May 26 2022 01:57:00 GMT-0500 (CDT)"),
465
- timezone: "CDT",
466
- },
467
- {
468
- forwardDate: true,
469
- },
470
- (result) => {
471
- expect(result.start.get("year")).toBe(2022);
472
- expect(result.start.get("month")).toBe(5);
473
- expect(result.start.get("day")).toBe(27);
474
- expect(result.start.get("hour")).toBe(1);
475
- }
476
- );
459
+ test("Test - Forward time calculation 'forwardDate' flag", () => {
460
+ testSingleCase(chrono, "1am", new Date(2022, 5 - 1, 26, 1, 57), { forwardDate: true }, (result) => {
461
+ expect(result.start.get("year")).toBe(2022);
462
+ expect(result.start.get("month")).toBe(5);
463
+ expect(result.start.get("day")).toBe(27);
464
+ expect(result.start.get("hour")).toBe(1);
465
+ });
477
466
 
478
467
  testSingleCase(chrono, "11am", new Date(2016, 10 - 1, 1, 12), { forwardDate: true }, (result) => {
479
468
  expect(result.start.get("year")).toBe(2016);
@@ -508,3 +497,23 @@ test("Test - forward dates only option", function () {
508
497
  expect(result.end.get("hour")).toBe(12);
509
498
  });
510
499
  });
500
+
501
+ test("Test - Test - Forward time calculation 'forwardDate' flag in different timezones", () => {
502
+ testSingleCase(
503
+ chrono,
504
+ "1am",
505
+ {
506
+ instant: new Date("Wed May 26 2022 01:57:00 GMT-0500 (CDT)"),
507
+ timezone: "CDT",
508
+ },
509
+ {
510
+ forwardDate: true,
511
+ },
512
+ (result) => {
513
+ expect(result.start.get("year")).toBe(2022);
514
+ expect(result.start.get("month")).toBe(5);
515
+ expect(result.start.get("day")).toBe(27);
516
+ expect(result.start.get("hour")).toBe(1);
517
+ }
518
+ );
519
+ });