chrono-node 2.7.8 → 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.
- package/dist/cjs/common/casualReferences.js +8 -10
- package/dist/cjs/common/casualReferences.js.map +1 -1
- package/dist/cjs/common/refiners/ForwardDateRefiner.js +33 -12
- package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENCasualDateParser.js +4 -1
- package/dist/cjs/locales/en/parsers/ENCasualDateParser.js.map +1 -1
- package/dist/cjs/locales/it/constants.d.ts +28 -0
- package/dist/cjs/locales/it/constants.js +165 -0
- package/dist/cjs/locales/it/constants.js.map +1 -0
- package/dist/cjs/locales/it/index.d.ts +9 -0
- package/dist/cjs/locales/it/index.js +66 -0
- package/dist/cjs/locales/it/index.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITCasualDateParser.d.ts +7 -0
- package/dist/cjs/locales/it/parsers/ITCasualDateParser.js +65 -0
- package/dist/cjs/locales/it/parsers/ITCasualDateParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITCasualTimeParser.d.ts +6 -0
- package/dist/cjs/locales/it/parsers/ITCasualTimeParser.js +47 -0
- package/dist/cjs/locales/it/parsers/ITCasualTimeParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITCasualYearMonthDayParser.d.ts +10 -0
- package/dist/cjs/locales/it/parsers/ITCasualYearMonthDayParser.js +35 -0
- package/dist/cjs/locales/it/parsers/ITCasualYearMonthDayParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameLittleEndianParser.d.ts +7 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameLittleEndianParser.js +57 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameLittleEndianParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameMiddleEndianParser.d.ts +6 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameMiddleEndianParser.js +59 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameMiddleEndianParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameParser.d.ts +6 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameParser.js +43 -0
- package/dist/cjs/locales/it/parsers/ITMonthNameParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.d.ts +7 -0
- package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.js +57 -0
- package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITSlashMonthFormatParser.d.ts +7 -0
- package/dist/cjs/locales/it/parsers/ITSlashMonthFormatParser.js +18 -0
- package/dist/cjs/locales/it/parsers/ITSlashMonthFormatParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.d.ts +10 -0
- package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js +50 -0
- package/dist/cjs/locales/it/parsers/ITTimeExpressionParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitAgoFormatParser.d.ts +9 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitAgoFormatParser.js +24 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitAgoFormatParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.d.ts +7 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js +26 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitLaterFormatParser.d.ts +9 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitLaterFormatParser.js +23 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitLaterFormatParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitWithinFormatParser.d.ts +7 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitWithinFormatParser.js +19 -0
- package/dist/cjs/locales/it/parsers/ITTimeUnitWithinFormatParser.js.map +1 -0
- package/dist/cjs/locales/it/parsers/ITWeekdayParser.d.ts +7 -0
- package/dist/cjs/locales/it/parsers/ITWeekdayParser.js +43 -0
- package/dist/cjs/locales/it/parsers/ITWeekdayParser.js.map +1 -0
- package/dist/cjs/locales/it/refiners/ITMergeDateRangeRefiner.d.ts +4 -0
- package/dist/cjs/locales/it/refiners/ITMergeDateRangeRefiner.js +13 -0
- package/dist/cjs/locales/it/refiners/ITMergeDateRangeRefiner.js.map +1 -0
- package/dist/cjs/locales/it/refiners/ITMergeDateTimeRefiner.d.ts +4 -0
- package/dist/cjs/locales/it/refiners/ITMergeDateTimeRefiner.js +13 -0
- package/dist/cjs/locales/it/refiners/ITMergeDateTimeRefiner.js.map +1 -0
- package/dist/cjs/locales/it/refiners/ITMergeRelativeDateRefiner.d.ts +7 -0
- package/dist/cjs/locales/it/refiners/ITMergeRelativeDateRefiner.js +36 -0
- package/dist/cjs/locales/it/refiners/ITMergeRelativeDateRefiner.js.map +1 -0
- package/dist/cjs/locales/ja/parsers/JPCasualDateParser.js +4 -4
- package/dist/cjs/locales/ja/refiners/JPMergeDateRangeRefiner.js +1 -1
- package/dist/cjs/locales/ja/refiners/JPMergeDateRangeRefiner.js.map +1 -1
- package/dist/cjs/results.d.ts +1 -0
- package/dist/cjs/results.js +18 -13
- package/dist/cjs/results.js.map +1 -1
- package/dist/cjs/utils/dates.d.ts +3 -0
- package/dist/cjs/utils/dates.js +17 -0
- package/dist/cjs/utils/dates.js.map +1 -0
- package/dist/cjs/utils/dayjs.js.map +1 -1
- package/dist/esm/common/casualReferences.js +8 -10
- package/dist/esm/common/casualReferences.js.map +1 -1
- package/dist/esm/common/refiners/ForwardDateRefiner.js +14 -12
- package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENCasualDateParser.js +4 -1
- package/dist/esm/locales/en/parsers/ENCasualDateParser.js.map +1 -1
- package/dist/esm/locales/it/constants.d.ts +28 -0
- package/dist/esm/locales/it/constants.js +200 -0
- package/dist/esm/locales/it/constants.js.map +1 -0
- package/dist/esm/locales/it/index.d.ts +9 -0
- package/dist/esm/locales/it/index.js +56 -0
- package/dist/esm/locales/it/index.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITCasualDateParser.d.ts +7 -0
- package/dist/esm/locales/it/parsers/ITCasualDateParser.js +40 -0
- package/dist/esm/locales/it/parsers/ITCasualDateParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITCasualTimeParser.d.ts +6 -0
- package/dist/esm/locales/it/parsers/ITCasualTimeParser.js +41 -0
- package/dist/esm/locales/it/parsers/ITCasualTimeParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITCasualYearMonthDayParser.d.ts +10 -0
- package/dist/esm/locales/it/parsers/ITCasualYearMonthDayParser.js +32 -0
- package/dist/esm/locales/it/parsers/ITCasualYearMonthDayParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITMonthNameLittleEndianParser.d.ts +7 -0
- package/dist/esm/locales/it/parsers/ITMonthNameLittleEndianParser.js +54 -0
- package/dist/esm/locales/it/parsers/ITMonthNameLittleEndianParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITMonthNameMiddleEndianParser.d.ts +6 -0
- package/dist/esm/locales/it/parsers/ITMonthNameMiddleEndianParser.js +56 -0
- package/dist/esm/locales/it/parsers/ITMonthNameMiddleEndianParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITMonthNameParser.d.ts +6 -0
- package/dist/esm/locales/it/parsers/ITMonthNameParser.js +40 -0
- package/dist/esm/locales/it/parsers/ITMonthNameParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.d.ts +7 -0
- package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.js +51 -0
- package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITSlashMonthFormatParser.d.ts +7 -0
- package/dist/esm/locales/it/parsers/ITSlashMonthFormatParser.js +15 -0
- package/dist/esm/locales/it/parsers/ITSlashMonthFormatParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITTimeExpressionParser.d.ts +10 -0
- package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js +47 -0
- package/dist/esm/locales/it/parsers/ITTimeExpressionParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitAgoFormatParser.d.ts +9 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitAgoFormatParser.js +21 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitAgoFormatParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.d.ts +7 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js +23 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitLaterFormatParser.d.ts +9 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitLaterFormatParser.js +20 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitLaterFormatParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitWithinFormatParser.d.ts +7 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitWithinFormatParser.js +16 -0
- package/dist/esm/locales/it/parsers/ITTimeUnitWithinFormatParser.js.map +1 -0
- package/dist/esm/locales/it/parsers/ITWeekdayParser.d.ts +7 -0
- package/dist/esm/locales/it/parsers/ITWeekdayParser.js +40 -0
- package/dist/esm/locales/it/parsers/ITWeekdayParser.js.map +1 -0
- package/dist/esm/locales/it/refiners/ITMergeDateRangeRefiner.d.ts +4 -0
- package/dist/esm/locales/it/refiners/ITMergeDateRangeRefiner.js +7 -0
- package/dist/esm/locales/it/refiners/ITMergeDateRangeRefiner.js.map +1 -0
- package/dist/esm/locales/it/refiners/ITMergeDateTimeRefiner.d.ts +4 -0
- package/dist/esm/locales/it/refiners/ITMergeDateTimeRefiner.js +7 -0
- package/dist/esm/locales/it/refiners/ITMergeDateTimeRefiner.js.map +1 -0
- package/dist/esm/locales/it/refiners/ITMergeRelativeDateRefiner.d.ts +7 -0
- package/dist/esm/locales/it/refiners/ITMergeRelativeDateRefiner.js +33 -0
- package/dist/esm/locales/it/refiners/ITMergeRelativeDateRefiner.js.map +1 -0
- package/dist/esm/locales/ja/parsers/JPCasualDateParser.js +4 -4
- package/dist/esm/locales/ja/refiners/JPMergeDateRangeRefiner.js +1 -1
- package/dist/esm/locales/ja/refiners/JPMergeDateRangeRefiner.js.map +1 -1
- package/dist/esm/results.d.ts +1 -0
- package/dist/esm/results.js +17 -13
- package/dist/esm/results.js.map +1 -1
- package/dist/esm/utils/dates.d.ts +3 -0
- package/dist/esm/utils/dates.js +12 -0
- package/dist/esm/utils/dates.js.map +1 -0
- package/dist/esm/utils/dayjs.js.map +1 -1
- package/package.json +1 -1
- package/src/common/casualReferences.ts +8 -10
- package/src/common/refiners/ForwardDateRefiner.ts +17 -11
- package/src/locales/en/parsers/ENCasualDateParser.ts +5 -1
- package/src/locales/it/constants.ts +230 -0
- package/src/locales/it/index.ts +99 -0
- package/src/locales/it/parsers/ITCasualDateParser.ts +53 -0
- package/src/locales/it/parsers/ITCasualTimeParser.ts +50 -0
- package/src/locales/it/parsers/ITCasualYearMonthDayParser.ts +49 -0
- package/src/locales/it/parsers/ITMonthNameLittleEndianParser.ts +69 -0
- package/src/locales/it/parsers/ITMonthNameMiddleEndianParser.ts +78 -0
- package/src/locales/it/parsers/ITMonthNameParser.ts +62 -0
- package/src/locales/it/parsers/ITRelativeDateFormatParser.ts +71 -0
- package/src/locales/it/parsers/ITSlashMonthFormatParser.ts +26 -0
- package/src/locales/it/parsers/ITTimeExpressionParser.ts +55 -0
- package/src/locales/it/parsers/ITTimeUnitAgoFormatParser.ts +25 -0
- package/src/locales/it/parsers/ITTimeUnitCasualRelativeFormatParser.ts +30 -0
- package/src/locales/it/parsers/ITTimeUnitLaterFormatParser.ts +27 -0
- package/src/locales/it/parsers/ITTimeUnitWithinFormatParser.ts +26 -0
- package/src/locales/it/parsers/ITWeekdayParser.ts +47 -0
- package/src/locales/it/refiners/ITMergeDateRangeRefiner.ts +17 -0
- package/src/locales/it/refiners/ITMergeDateTimeRefiner.ts +13 -0
- package/src/locales/it/refiners/ITMergeRelativeDateRefiner.ts +58 -0
- package/src/locales/ja/parsers/JPCasualDateParser.ts +4 -4
- package/src/locales/ja/refiners/JPMergeDateRangeRefiner.ts +1 -1
- package/src/results.ts +18 -13
- package/src/utils/dates.ts +24 -0
- package/src/utils/dayjs.ts +6 -0
- package/test/en/en_casual.test.ts +4 -1
- package/test/en/en_relative.test.ts +126 -39
- package/test/en/en_time_exp.test.ts +27 -18
- package/test/ja/ja_casual.test.ts +8 -0
- package/test/ja/ja_standard.test.ts +19 -0
- package/test/nl/nl_relative.test.ts +33 -17
- package/test/result.test.ts +24 -0
- package/test/system_timezone.test.ts +20 -4
|
@@ -3,14 +3,14 @@ import dayjs from "dayjs";
|
|
|
3
3
|
import { Meridiem } from "../../../types";
|
|
4
4
|
import * as references from "../../../common/casualReferences";
|
|
5
5
|
|
|
6
|
-
const PATTERN =
|
|
6
|
+
const PATTERN = /今日|きょう|本日|ほんじつ|昨日|きのう|明日|あした|今夜|こんや|今夕|こんゆう|今晩|こんばん|今朝|けさ/i;
|
|
7
7
|
|
|
8
8
|
function normalizeTextToKanji(text: string) {
|
|
9
9
|
switch (text) {
|
|
10
10
|
case "きょう":
|
|
11
11
|
return "今日";
|
|
12
|
-
case "
|
|
13
|
-
return "
|
|
12
|
+
case "ほんじつ":
|
|
13
|
+
return "本日";
|
|
14
14
|
case "きのう":
|
|
15
15
|
return "昨日";
|
|
16
16
|
case "あした":
|
|
@@ -46,8 +46,8 @@ export default class JPCasualDateParser implements Parser {
|
|
|
46
46
|
case "明日":
|
|
47
47
|
return references.tomorrow(context.reference);
|
|
48
48
|
|
|
49
|
+
case "本日":
|
|
49
50
|
case "今日":
|
|
50
|
-
case "当日":
|
|
51
51
|
return references.today(context.reference);
|
|
52
52
|
}
|
|
53
53
|
|
|
@@ -8,6 +8,6 @@ import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMerg
|
|
|
8
8
|
*/
|
|
9
9
|
export default class JPMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner {
|
|
10
10
|
patternBetween(): RegExp {
|
|
11
|
-
return /^\s*(
|
|
11
|
+
return /^\s*(から|ー|-|~|~)\s*$/i;
|
|
12
12
|
}
|
|
13
13
|
}
|
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
|
-
|
|
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 =
|
|
66
|
-
this.imply("day", refDayJs.
|
|
67
|
-
this.imply("month", refDayJs.
|
|
68
|
-
this.imply("year", refDayJs.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
225
|
-
components.assign("timezoneOffset", -reference.instant.getTimezoneOffset());
|
|
226
|
-
}
|
|
233
|
+
components.assign("timezoneOffset", reference.getTimezoneOffset());
|
|
227
234
|
} else {
|
|
228
235
|
implySimilarTime(components, date);
|
|
229
|
-
|
|
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
|
+
}
|
package/src/utils/dayjs.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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,
|
|
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
|
|
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
|
-
|
|
257
|
-
|
|
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
|
-
|
|
260
|
-
|
|
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
|
-
|
|
263
|
-
expect(result).toBeDate(new Date("Sun Nov
|
|
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
|
-
|
|
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
|
-
|
|
271
|
-
result.
|
|
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
|
-
|
|
274
|
-
|
|
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
|
-
|
|
279
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
290
|
-
const
|
|
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
|
-
|
|
293
|
-
result.start.imply("timezoneOffset",
|
|
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
|
-
|
|
296
|
-
|
|
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 = "
|
|
301
|
-
const result = chrono.parse(text, { instant:
|
|
302
|
-
|
|
303
|
-
expect(result
|
|
304
|
-
|
|
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 -
|
|
460
|
-
testSingleCase(
|
|
461
|
-
|
|
462
|
-
"
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
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
|
+
});
|
|
@@ -10,6 +10,14 @@ test("Test - Single Expression", function () {
|
|
|
10
10
|
expect(result.text).toBe("きょう");
|
|
11
11
|
expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
|
|
12
12
|
});
|
|
13
|
+
testSingleCase(chrono.ja, "本日はお日柄もよく", new Date(2012, 8 - 1, 10, 12), (result) => {
|
|
14
|
+
expect(result.text).toBe("本日");
|
|
15
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
|
|
16
|
+
});
|
|
17
|
+
testSingleCase(chrono.ja, "ほんじつはお日柄もよく", new Date(2012, 8 - 1, 10, 12), (result) => {
|
|
18
|
+
expect(result.text).toBe("ほんじつ");
|
|
19
|
+
expect(result.start).toBeDate(new Date(2012, 8 - 1, 10, 12));
|
|
20
|
+
});
|
|
13
21
|
|
|
14
22
|
testSingleCase(chrono.ja, "昨日の全国観測値ランキング", new Date(2012, 8 - 1, 10, 12), (result) => {
|
|
15
23
|
expect(result.text).toBe("昨日");
|
|
@@ -213,4 +213,23 @@ test("Test - Range Expression", function () {
|
|
|
213
213
|
|
|
214
214
|
expect(result.end).toBeDate(new Date(2014, 1 - 1, 7, 12));
|
|
215
215
|
});
|
|
216
|
+
|
|
217
|
+
testSingleCase(chrono.ja, "2013年12月26日 ~ 2014年1月7日", new Date(2012, 8 - 1, 10), (result) => {
|
|
218
|
+
expect(result.index).toBe(0);
|
|
219
|
+
expect(result.text).toBe("2013年12月26日 ~ 2014年1月7日");
|
|
220
|
+
|
|
221
|
+
expect(result.start).not.toBeNull();
|
|
222
|
+
expect(result.start.get("year")).toBe(2013);
|
|
223
|
+
expect(result.start.get("month")).toBe(12);
|
|
224
|
+
expect(result.start.get("day")).toBe(26);
|
|
225
|
+
|
|
226
|
+
expect(result.start).toBeDate(new Date(2013, 12 - 1, 26, 12));
|
|
227
|
+
|
|
228
|
+
expect(result.end).not.toBeNull();
|
|
229
|
+
expect(result.end.get("year")).toBe(2014);
|
|
230
|
+
expect(result.end.get("month")).toBe(1);
|
|
231
|
+
expect(result.end.get("day")).toBe(7);
|
|
232
|
+
|
|
233
|
+
expect(result.end).toBeDate(new Date(2014, 1 - 1, 7, 12));
|
|
234
|
+
});
|
|
216
235
|
});
|
|
@@ -185,42 +185,58 @@ test("Test - Relative date components' certainty", () => {
|
|
|
185
185
|
});
|
|
186
186
|
});
|
|
187
187
|
|
|
188
|
-
test("Test - Relative date
|
|
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
|
-
//
|
|
205
|
-
const text = "
|
|
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
|
|
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
|
-
//
|
|
217
|
-
const text = "
|
|
218
|
-
const result = chrono.nl.parse(text,
|
|
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
|
-
|
|
224
|
-
expect(result).toBeDate(new Date("Sun Nov 29 2020
|
|
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
|
});
|
package/test/result.test.ts
CHANGED
|
@@ -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 -
|
|
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("
|
|
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 -
|
|
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 -
|
|
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);
|