chrono-node 2.7.4 → 2.7.6
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/parsers/AbstractTimeExpressionParser.js +11 -2
- package/dist/cjs/common/parsers/AbstractTimeExpressionParser.js.map +1 -1
- package/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/locales/de/index.d.ts +2 -2
- package/dist/cjs/locales/de/index.js.map +1 -1
- package/dist/cjs/locales/en/constants.js +3 -2
- package/dist/cjs/locales/en/constants.js.map +1 -1
- package/dist/cjs/locales/en/index.d.ts +2 -2
- package/dist/cjs/locales/en/index.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENMonthNameLittleEndianParser.js +1 -1
- package/dist/cjs/locales/en/parsers/ENMonthNameLittleEndianParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENMonthNameMiddleEndianParser.js +1 -1
- package/dist/cjs/locales/en/parsers/ENMonthNameMiddleEndianParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js +1 -1
- package/dist/cjs/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
- package/dist/cjs/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -1
- package/dist/cjs/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -1
- package/dist/cjs/locales/es/index.d.ts +2 -2
- package/dist/cjs/locales/es/index.js.map +1 -1
- package/dist/cjs/locales/fr/index.d.ts +2 -2
- package/dist/cjs/locales/fr/index.js.map +1 -1
- package/dist/cjs/locales/ja/index.d.ts +2 -2
- package/dist/cjs/locales/ja/index.js.map +1 -1
- package/dist/cjs/locales/nl/index.d.ts +2 -2
- package/dist/cjs/locales/nl/index.js.map +1 -1
- package/dist/cjs/locales/pt/index.d.ts +2 -2
- package/dist/cjs/locales/pt/index.js.map +1 -1
- package/dist/cjs/locales/ru/index.d.ts +2 -2
- package/dist/cjs/locales/ru/index.js.map +1 -1
- package/dist/cjs/locales/uk/index.d.ts +2 -2
- package/dist/cjs/locales/uk/index.js.map +1 -1
- package/dist/cjs/locales/zh/hans/index.d.ts +2 -2
- package/dist/cjs/locales/zh/hans/index.js.map +1 -1
- package/dist/cjs/locales/zh/hant/index.d.ts +2 -2
- package/dist/cjs/locales/zh/hant/index.js.map +1 -1
- package/dist/cjs/locales/zh/index.d.ts +12 -1
- package/dist/cjs/locales/zh/index.js +65 -5
- package/dist/cjs/locales/zh/index.js.map +1 -1
- package/dist/cjs/utils/pattern.d.ts +1 -1
- package/dist/cjs/utils/pattern.js +2 -2
- package/dist/cjs/utils/pattern.js.map +1 -1
- package/dist/esm/common/parsers/AbstractTimeExpressionParser.js +11 -2
- package/dist/esm/common/parsers/AbstractTimeExpressionParser.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/locales/de/index.d.ts +2 -2
- package/dist/esm/locales/de/index.js.map +1 -1
- package/dist/esm/locales/en/constants.js +3 -2
- package/dist/esm/locales/en/constants.js.map +1 -1
- package/dist/esm/locales/en/index.d.ts +2 -2
- package/dist/esm/locales/en/index.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENMonthNameLittleEndianParser.js +1 -1
- package/dist/esm/locales/en/parsers/ENMonthNameLittleEndianParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENMonthNameMiddleEndianParser.js +1 -1
- package/dist/esm/locales/en/parsers/ENMonthNameMiddleEndianParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js +1 -1
- package/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js.map +1 -1
- package/dist/esm/locales/en/refiners/ENMergeDateTimeRefiner.js +1 -1
- package/dist/esm/locales/en/refiners/ENMergeDateTimeRefiner.js.map +1 -1
- package/dist/esm/locales/es/index.d.ts +2 -2
- package/dist/esm/locales/es/index.js.map +1 -1
- package/dist/esm/locales/fr/index.d.ts +2 -2
- package/dist/esm/locales/fr/index.js.map +1 -1
- package/dist/esm/locales/ja/index.d.ts +2 -2
- package/dist/esm/locales/ja/index.js.map +1 -1
- package/dist/esm/locales/nl/index.d.ts +2 -2
- package/dist/esm/locales/nl/index.js.map +1 -1
- package/dist/esm/locales/pt/index.d.ts +2 -2
- package/dist/esm/locales/pt/index.js.map +1 -1
- package/dist/esm/locales/ru/index.d.ts +2 -2
- package/dist/esm/locales/ru/index.js.map +1 -1
- package/dist/esm/locales/uk/index.d.ts +2 -2
- package/dist/esm/locales/uk/index.js.map +1 -1
- package/dist/esm/locales/zh/hans/index.d.ts +2 -2
- package/dist/esm/locales/zh/hans/index.js.map +1 -1
- package/dist/esm/locales/zh/hant/index.d.ts +2 -2
- package/dist/esm/locales/zh/hant/index.js.map +1 -1
- package/dist/esm/locales/zh/index.d.ts +12 -1
- package/dist/esm/locales/zh/index.js +53 -1
- package/dist/esm/locales/zh/index.js.map +1 -1
- package/dist/esm/utils/pattern.d.ts +1 -1
- package/dist/esm/utils/pattern.js +2 -2
- package/dist/esm/utils/pattern.js.map +1 -1
- package/package.json +1 -1
- package/src/common/parsers/AbstractTimeExpressionParser.ts +16 -2
- package/src/index.ts +1 -1
- package/src/locales/de/index.ts +2 -2
- package/src/locales/en/constants.ts +9 -2
- package/src/locales/en/index.ts +2 -2
- package/src/locales/en/parsers/ENMonthNameLittleEndianParser.ts +1 -1
- package/src/locales/en/parsers/ENMonthNameMiddleEndianParser.ts +5 -4
- package/src/locales/en/parsers/ENTimeUnitLaterFormatParser.ts +1 -4
- package/src/locales/en/refiners/ENMergeDateTimeRefiner.ts +1 -1
- package/src/locales/es/index.ts +2 -2
- package/src/locales/fr/index.ts +2 -2
- package/src/locales/ja/index.ts +2 -2
- package/src/locales/nl/index.ts +2 -2
- package/src/locales/pt/index.ts +2 -2
- package/src/locales/ru/index.ts +2 -2
- package/src/locales/uk/index.ts +2 -2
- package/src/locales/zh/hans/index.ts +2 -2
- package/src/locales/zh/hant/index.ts +2 -2
- package/src/locales/zh/index.ts +73 -1
- package/src/utils/pattern.ts +6 -2
- package/test/en/en_casual.test.ts +6 -0
- package/test/en/en_month.test.ts +6 -1
- package/test/en/en_month_name_middle_endian.test.ts +2 -0
- package/test/en/en_slash.test.ts +15 -0
- package/test/en/en_time_exp.test.ts +30 -0
- package/test/en/en_time_units_later.test.ts +12 -0
- package/test/en/en_time_units_within.test.ts +42 -0
- package/test/system_timezone.test.ts +11 -0
- package/test/zh/{zh_hans_casual.test.ts → hans/zh_hans_casual.test.ts} +2 -2
- package/test/zh/{zh_hans_date.test.ts → hans/zh_hans_date.test.ts} +2 -2
- package/test/zh/{zh_hans_deadline.test.ts → hans/zh_hans_deadline.test.ts} +2 -2
- package/test/zh/{zh_hans_time_exp.test.ts → hans/zh_hans_time_exp.test.ts} +16 -2
- package/test/zh/{zh_hans_weekday.test.ts → hans/zh_hans_weekday.test.ts} +2 -2
- package/test/zh/{zh_hant_casual.test.ts → hant/zh_hant_casual.test.ts} +2 -2
- package/test/zh/{zh_hant_date.test.ts → hant/zh_hant_date.test.ts} +2 -2
- package/test/zh/{zh_hant_deadline.test.ts → hant/zh_hant_deadline.test.ts} +2 -2
- package/test/zh/{zh_hant_time_exp.test.ts → hant/zh_hant_time_exp.test.ts} +2 -2
- package/test/zh/{zh_hant_weekday.test.ts → hant/zh_hant_weekday.test.ts} +2 -2
- package/test/zh/zh.test.ts +18 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
declare type DictionaryLike = string[] | {
|
|
2
2
|
[word: string]: unknown;
|
|
3
3
|
} | Map<string, unknown>;
|
|
4
|
-
export declare function repeatedTimeunitPattern(prefix: string, singleTimeunitPattern: string): string;
|
|
4
|
+
export declare function repeatedTimeunitPattern(prefix: string, singleTimeunitPattern: string, connectorPattern?: string): string;
|
|
5
5
|
export declare function extractTerms(dictionary: DictionaryLike): string[];
|
|
6
6
|
export declare function matchAnyPattern(dictionary: DictionaryLike): string;
|
|
7
7
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export function repeatedTimeunitPattern(prefix, singleTimeunitPattern) {
|
|
1
|
+
export function repeatedTimeunitPattern(prefix, singleTimeunitPattern, connectorPattern = "\\s{0,5},?\\s{0,5}") {
|
|
2
2
|
const singleTimeunitPatternNoCapture = singleTimeunitPattern.replace(/\((?!\?)/g, "(?:");
|
|
3
|
-
return `${prefix}${singleTimeunitPatternNoCapture}
|
|
3
|
+
return `${prefix}${singleTimeunitPatternNoCapture}(?:${connectorPattern}${singleTimeunitPatternNoCapture}){0,10}`;
|
|
4
4
|
}
|
|
5
5
|
export function extractTerms(dictionary) {
|
|
6
6
|
let keys;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../../src/utils/pattern.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,
|
|
1
|
+
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../../src/utils/pattern.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,uBAAuB,CACnC,MAAc,EACd,qBAA6B,EAC7B,gBAAgB,GAAG,oBAAoB;IAEvC,MAAM,8BAA8B,GAAG,qBAAqB,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACzF,OAAO,GAAG,MAAM,GAAG,8BAA8B,MAAM,gBAAgB,GAAG,8BAA8B,SAAS,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,UAA0B;IACnD,IAAI,IAAc,CAAC;IACnB,IAAI,UAAU,YAAY,KAAK,EAAE;QAC7B,IAAI,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;KAC1B;SAAM,IAAI,UAAU,YAAY,GAAG,EAAE;QAClC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAE,UAAmC,CAAC,IAAI,EAAE,CAAC,CAAC;KAClE;SAAM;QACH,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KAClC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,UAA0B;IAGtD,MAAM,WAAW,GAAG,YAAY,CAAC,UAAU,CAAC;SACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;SACnC,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAE3B,OAAO,MAAM,WAAW,GAAG,CAAC;AAChC,CAAC"}
|
package/package.json
CHANGED
|
@@ -80,6 +80,13 @@ export abstract class AbstractTimeExpressionParser implements Parser {
|
|
|
80
80
|
extract(context: ParsingContext, match: RegExpMatchArray): ParsingResult {
|
|
81
81
|
const startComponents = this.extractPrimaryTimeComponents(context, match);
|
|
82
82
|
if (!startComponents) {
|
|
83
|
+
// If the match seem like a year e.g. "2013.12:...",
|
|
84
|
+
// then skips the year part and try matching again.
|
|
85
|
+
if (match[0].match(/^\d{4}/)) {
|
|
86
|
+
match.index += 4; // Skip over potential overlapping pattern
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
|
|
83
90
|
match.index += match[0].length; // Skip over potential overlapping pattern
|
|
84
91
|
return null;
|
|
85
92
|
}
|
|
@@ -94,8 +101,15 @@ export abstract class AbstractTimeExpressionParser implements Parser {
|
|
|
94
101
|
const followingMatch = followingPattern.exec(remainingText);
|
|
95
102
|
|
|
96
103
|
// Pattern "456-12", "2022-12" should not be time without proper context
|
|
97
|
-
if (text.match(/^\d{3,4}/) && followingMatch
|
|
98
|
-
|
|
104
|
+
if (text.match(/^\d{3,4}/) && followingMatch) {
|
|
105
|
+
// e.g. "2022-12"
|
|
106
|
+
if (followingMatch[0].match(/^\s*([+-])\s*\d{2,4}$/)) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
// e.g. "2022-12:01..."
|
|
110
|
+
if (followingMatch[0].match(/^\s*([+-])\s*\d{2}\W\d{2}/)) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
99
113
|
}
|
|
100
114
|
|
|
101
115
|
if (
|
package/src/index.ts
CHANGED
|
@@ -39,6 +39,6 @@ export function parse(text: string, ref?: ParsingReference | Date, option?: Pars
|
|
|
39
39
|
/**
|
|
40
40
|
* A shortcut for {@link en | chrono.en.casual.parseDate()}
|
|
41
41
|
*/
|
|
42
|
-
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
42
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date | null {
|
|
43
43
|
return casual.parseDate(text, ref, option);
|
|
44
44
|
}
|
package/src/locales/de/index.ts
CHANGED
|
@@ -22,11 +22,11 @@ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Wee
|
|
|
22
22
|
export const casual = new Chrono(createCasualConfiguration());
|
|
23
23
|
export const strict = new Chrono(createConfiguration(true));
|
|
24
24
|
|
|
25
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
25
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
26
26
|
return casual.parse(text, ref, option);
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
29
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
30
30
|
return casual.parseDate(text, ref, option);
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -264,10 +264,17 @@ const SINGLE_TIME_UNIT_NO_ABBR_PATTERN = `(${NUMBER_PATTERN})\\s{0,3}(${matchAny
|
|
|
264
264
|
TIME_UNIT_DICTIONARY_NO_ABBR
|
|
265
265
|
)})`;
|
|
266
266
|
|
|
267
|
-
|
|
267
|
+
const TIME_UNIT_CONNECTOR_PATTERN = `\\s{0,5},?(?:\\s*and)?\\s{0,5}`;
|
|
268
|
+
|
|
269
|
+
export const TIME_UNITS_PATTERN = repeatedTimeunitPattern(
|
|
270
|
+
`(?:(?:about|around)\\s{0,3})?`,
|
|
271
|
+
SINGLE_TIME_UNIT_PATTERN,
|
|
272
|
+
TIME_UNIT_CONNECTOR_PATTERN
|
|
273
|
+
);
|
|
268
274
|
export const TIME_UNITS_NO_ABBR_PATTERN = repeatedTimeunitPattern(
|
|
269
275
|
`(?:(?:about|around)\\s{0,3})?`,
|
|
270
|
-
SINGLE_TIME_UNIT_NO_ABBR_PATTERN
|
|
276
|
+
SINGLE_TIME_UNIT_NO_ABBR_PATTERN,
|
|
277
|
+
TIME_UNIT_CONNECTOR_PATTERN
|
|
271
278
|
);
|
|
272
279
|
|
|
273
280
|
export function parseTimeUnits(timeunitText): TimeUnits {
|
package/src/locales/en/index.ts
CHANGED
|
@@ -33,13 +33,13 @@ export const GB = new Chrono(configuration.createCasualConfiguration(true));
|
|
|
33
33
|
/**
|
|
34
34
|
* A shortcut for en.casual.parse()
|
|
35
35
|
*/
|
|
36
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
36
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
37
37
|
return casual.parse(text, ref, option);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
/**
|
|
41
41
|
* A shortcut for en.casual.parseDate()
|
|
42
42
|
*/
|
|
43
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
43
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
44
44
|
return casual.parseDate(text, ref, option);
|
|
45
45
|
}
|
|
@@ -6,17 +6,18 @@ import { YEAR_PATTERN, parseYear } from "../constants";
|
|
|
6
6
|
import { matchAnyPattern } from "../../../utils/pattern";
|
|
7
7
|
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary";
|
|
8
8
|
|
|
9
|
+
// prettier-ignore
|
|
9
10
|
const PATTERN = new RegExp(
|
|
10
11
|
`(${matchAnyPattern(MONTH_DICTIONARY)})` +
|
|
11
12
|
"(?:-|/|\\s*,?\\s*)" +
|
|
12
13
|
`(${ORDINAL_NUMBER_PATTERN})(?!\\s*(?:am|pm))\\s*` +
|
|
13
14
|
"(?:" +
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
"(?:to|\\-)\\s*" +
|
|
16
|
+
`(${ORDINAL_NUMBER_PATTERN})\\s*` +
|
|
16
17
|
")?" +
|
|
17
18
|
"(?:" +
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
`(?:-|/|\\s*,\\s*|\\s+)` +
|
|
20
|
+
`(${YEAR_PATTERN})` +
|
|
20
21
|
")?" +
|
|
21
22
|
"(?=\\W|$)(?!\\:\\d)",
|
|
22
23
|
"i"
|
|
@@ -8,10 +8,7 @@ const PATTERN = new RegExp(
|
|
|
8
8
|
"i"
|
|
9
9
|
);
|
|
10
10
|
|
|
11
|
-
const STRICT_PATTERN = new RegExp(
|
|
12
|
-
"" + "(" + TIME_UNITS_NO_ABBR_PATTERN + ")" + "(later|from now)" + "(?=(?:\\W|$))",
|
|
13
|
-
"i"
|
|
14
|
-
);
|
|
11
|
+
const STRICT_PATTERN = new RegExp(`(${TIME_UNITS_NO_ABBR_PATTERN})\\s{0,5}(later|after|from now)(?=\\W|$)`, "i");
|
|
15
12
|
const GROUP_NUM_TIMEUNITS = 1;
|
|
16
13
|
|
|
17
14
|
export default class ENTimeUnitLaterFormatParser extends AbstractParserWithWordBoundaryChecking {
|
|
@@ -8,6 +8,6 @@ import AbstractMergeDateTimeRefiner from "../../../common/refiners/AbstractMerge
|
|
|
8
8
|
*/
|
|
9
9
|
export default class ENMergeDateTimeRefiner extends AbstractMergeDateTimeRefiner {
|
|
10
10
|
patternBetween(): RegExp {
|
|
11
|
-
return new RegExp("^\\s*(T|at|after|before|on|of
|
|
11
|
+
return new RegExp("^\\s*(T|at|after|before|on|of|,|-|\\.|:)?\\s*$");
|
|
12
12
|
}
|
|
13
13
|
}
|
package/src/locales/es/index.ts
CHANGED
|
@@ -25,11 +25,11 @@ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Wee
|
|
|
25
25
|
export const casual = new Chrono(createCasualConfiguration());
|
|
26
26
|
export const strict = new Chrono(createConfiguration(true));
|
|
27
27
|
|
|
28
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
28
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
29
29
|
return casual.parse(text, ref, option);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
32
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
33
33
|
return casual.parseDate(text, ref, option);
|
|
34
34
|
}
|
|
35
35
|
|
package/src/locales/fr/index.ts
CHANGED
|
@@ -28,11 +28,11 @@ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Wee
|
|
|
28
28
|
export const casual = new Chrono(createCasualConfiguration());
|
|
29
29
|
export const strict = new Chrono(createConfiguration(true));
|
|
30
30
|
|
|
31
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
31
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
32
32
|
return casual.parse(text, ref, option);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
35
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
36
36
|
return casual.parseDate(text, ref, option);
|
|
37
37
|
}
|
|
38
38
|
|
package/src/locales/ja/index.ts
CHANGED
|
@@ -19,11 +19,11 @@ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Wee
|
|
|
19
19
|
export const casual = new Chrono(createCasualConfiguration());
|
|
20
20
|
export const strict = new Chrono(createConfiguration());
|
|
21
21
|
|
|
22
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
22
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
23
23
|
return casual.parse(text, ref, option);
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
26
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
27
27
|
return casual.parseDate(text, ref, option);
|
|
28
28
|
}
|
|
29
29
|
|
package/src/locales/nl/index.ts
CHANGED
|
@@ -33,11 +33,11 @@ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Wee
|
|
|
33
33
|
export const casual = new Chrono(createCasualConfiguration());
|
|
34
34
|
export const strict = new Chrono(createConfiguration(true));
|
|
35
35
|
|
|
36
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
36
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
37
37
|
return casual.parse(text, ref, option);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
40
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
41
41
|
return casual.parseDate(text, ref, option);
|
|
42
42
|
}
|
|
43
43
|
|
package/src/locales/pt/index.ts
CHANGED
|
@@ -24,11 +24,11 @@ export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Wee
|
|
|
24
24
|
export const casual = new Chrono(createCasualConfiguration());
|
|
25
25
|
export const strict = new Chrono(createConfiguration(true));
|
|
26
26
|
|
|
27
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
27
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
28
28
|
return casual.parse(text, ref, option);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
31
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
32
32
|
return casual.parseDate(text, ref, option);
|
|
33
33
|
}
|
|
34
34
|
|
package/src/locales/ru/index.ts
CHANGED
|
@@ -40,14 +40,14 @@ export const strict = new Chrono(createConfiguration(true));
|
|
|
40
40
|
/**
|
|
41
41
|
* A shortcut for ru.casual.parse()
|
|
42
42
|
*/
|
|
43
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
43
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
44
44
|
return casual.parse(text, ref, option);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* A shortcut for ru.casual.parseDate()
|
|
49
49
|
*/
|
|
50
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
50
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
51
51
|
return casual.parseDate(text, ref, option);
|
|
52
52
|
}
|
|
53
53
|
|
package/src/locales/uk/index.ts
CHANGED
|
@@ -78,13 +78,13 @@ export function createConfiguration(strictMode: boolean): Configuration {
|
|
|
78
78
|
/**
|
|
79
79
|
* A shortcut for uk.casual.parse()
|
|
80
80
|
*/
|
|
81
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
81
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
82
82
|
return casual.parse(text, ref, option);
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
/**
|
|
86
86
|
* A shortcut for uk.casual.parseDate()
|
|
87
87
|
*/
|
|
88
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
88
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
89
89
|
return casual.parseDate(text, ref, option);
|
|
90
90
|
}
|
|
@@ -25,11 +25,11 @@ export const hans = new Chrono(createCasualConfiguration());
|
|
|
25
25
|
export const casual = new Chrono(createCasualConfiguration());
|
|
26
26
|
export const strict = new Chrono(createConfiguration());
|
|
27
27
|
|
|
28
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
28
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
29
29
|
return casual.parse(text, ref, option);
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
32
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
33
33
|
return casual.parseDate(text, ref, option);
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -26,11 +26,11 @@ export const hant = new Chrono(createCasualConfiguration());
|
|
|
26
26
|
export const casual = new Chrono(createCasualConfiguration());
|
|
27
27
|
export const strict = new Chrono(createConfiguration());
|
|
28
28
|
|
|
29
|
-
export function parse(text: string, ref?: Date, option?: ParsingOption): ParsedResult[] {
|
|
29
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
30
30
|
return casual.parse(text, ref, option);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
export function parseDate(text: string, ref?: Date, option?: ParsingOption): Date {
|
|
33
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
34
34
|
return casual.parseDate(text, ref, option);
|
|
35
35
|
}
|
|
36
36
|
|
package/src/locales/zh/index.ts
CHANGED
|
@@ -1,2 +1,74 @@
|
|
|
1
|
-
|
|
1
|
+
import { includeCommonConfiguration } from "../../configurations";
|
|
2
|
+
import { Chrono, Configuration, Parser, Refiner } from "../../chrono";
|
|
3
|
+
import { ParsingResult, ParsingComponents, ReferenceWithTimezone } from "../../results";
|
|
4
|
+
import { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday } from "../../types";
|
|
5
|
+
import ExtractTimezoneOffsetRefiner from "../../common/refiners/ExtractTimezoneOffsetRefiner";
|
|
6
|
+
|
|
7
|
+
import ZHHansCasualDateParser from "./hans/parsers/ZHHansCasualDateParser";
|
|
8
|
+
import ZHHansDateParser from "./hans/parsers/ZHHansDateParser";
|
|
9
|
+
import ZHHansDeadlineFormatParser from "./hans/parsers/ZHHansDeadlineFormatParser";
|
|
10
|
+
import ZHHansRelationWeekdayParser from "./hans/parsers/ZHHansRelationWeekdayParser";
|
|
11
|
+
import ZHHansTimeExpressionParser from "./hans/parsers/ZHHansTimeExpressionParser";
|
|
12
|
+
import ZHHansWeekdayParser from "./hans/parsers/ZHHansWeekdayParser";
|
|
13
|
+
|
|
14
|
+
import ZHHantCasualDateParser from "./hant/parsers/ZHHantCasualDateParser";
|
|
15
|
+
import ZHHantDateParser from "./hant/parsers/ZHHantDateParser";
|
|
16
|
+
import ZHHantDeadlineFormatParser from "./hant/parsers/ZHHantDeadlineFormatParser";
|
|
17
|
+
import ZHHantRelationWeekdayParser from "./hant/parsers/ZHHantRelationWeekdayParser";
|
|
18
|
+
import ZHHantTimeExpressionParser from "./hant/parsers/ZHHantTimeExpressionParser";
|
|
19
|
+
import ZHHantWeekdayParser from "./hant/parsers/ZHHantWeekdayParser";
|
|
20
|
+
import ZHHantMergeDateRangeRefiner from "./hant/refiners/ZHHantMergeDateRangeRefiner";
|
|
21
|
+
import ZHHantMergeDateTimeRefiner from "./hant/refiners/ZHHantMergeDateTimeRefiner";
|
|
22
|
+
|
|
23
|
+
export * as hant from "./hant";
|
|
2
24
|
export * as hans from "./hans";
|
|
25
|
+
export { Chrono, Parser, Refiner, ParsingResult, ParsingComponents, ReferenceWithTimezone };
|
|
26
|
+
export { Component, ParsedResult, ParsingOption, ParsingReference, Meridiem, Weekday };
|
|
27
|
+
|
|
28
|
+
export const casual = new Chrono(createCasualConfiguration());
|
|
29
|
+
export const strict = new Chrono(createConfiguration());
|
|
30
|
+
|
|
31
|
+
export function parse(text: string, ref?: ParsingReference | Date, option?: ParsingOption): ParsedResult[] {
|
|
32
|
+
return casual.parse(text, ref, option);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export function parseDate(text: string, ref?: ParsingReference | Date, option?: ParsingOption): Date {
|
|
36
|
+
return casual.parseDate(text, ref, option);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @ignore (to be documented later)
|
|
41
|
+
*/
|
|
42
|
+
export function createCasualConfiguration(): Configuration {
|
|
43
|
+
const option = createConfiguration();
|
|
44
|
+
option.parsers.unshift(new ZHHantCasualDateParser());
|
|
45
|
+
return option;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* @ignore (to be documented later)
|
|
50
|
+
*/
|
|
51
|
+
export function createConfiguration(): Configuration {
|
|
52
|
+
const configuration = includeCommonConfiguration({
|
|
53
|
+
parsers: [
|
|
54
|
+
new ZHHantDateParser(),
|
|
55
|
+
new ZHHansDateParser(),
|
|
56
|
+
new ZHHantRelationWeekdayParser(),
|
|
57
|
+
new ZHHansRelationWeekdayParser(),
|
|
58
|
+
new ZHHantWeekdayParser(),
|
|
59
|
+
new ZHHansWeekdayParser(),
|
|
60
|
+
new ZHHantTimeExpressionParser(),
|
|
61
|
+
new ZHHansTimeExpressionParser(),
|
|
62
|
+
new ZHHantDeadlineFormatParser(),
|
|
63
|
+
new ZHHansDeadlineFormatParser(),
|
|
64
|
+
],
|
|
65
|
+
refiners: [new ZHHantMergeDateRangeRefiner(), new ZHHantMergeDateTimeRefiner()],
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// REMOVE ExtractTimezoneOffsetRefiner
|
|
69
|
+
configuration.refiners = configuration.refiners.filter(
|
|
70
|
+
(refiner) => !(refiner instanceof ExtractTimezoneOffsetRefiner)
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
return configuration;
|
|
74
|
+
}
|
package/src/utils/pattern.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
type DictionaryLike = string[] | { [word: string]: unknown } | Map<string, unknown>;
|
|
2
2
|
|
|
3
|
-
export function repeatedTimeunitPattern(
|
|
3
|
+
export function repeatedTimeunitPattern(
|
|
4
|
+
prefix: string,
|
|
5
|
+
singleTimeunitPattern: string,
|
|
6
|
+
connectorPattern = "\\s{0,5},?\\s{0,5}"
|
|
7
|
+
): string {
|
|
4
8
|
const singleTimeunitPatternNoCapture = singleTimeunitPattern.replace(/\((?!\?)/g, "(?:");
|
|
5
|
-
return `${prefix}${singleTimeunitPatternNoCapture}
|
|
9
|
+
return `${prefix}${singleTimeunitPatternNoCapture}(?:${connectorPattern}${singleTimeunitPatternNoCapture}){0,10}`;
|
|
6
10
|
}
|
|
7
11
|
|
|
8
12
|
export function extractTerms(dictionary: DictionaryLike): string[] {
|
|
@@ -409,4 +409,10 @@ test("Test - Random negative text", () => {
|
|
|
409
409
|
testUnexpectedResult(chrono, "mar");
|
|
410
410
|
|
|
411
411
|
testUnexpectedResult(chrono, "jan");
|
|
412
|
+
|
|
413
|
+
testUnexpectedResult(chrono, "do I have the money");
|
|
414
|
+
|
|
415
|
+
testUnexpectedResult(chrono.casual, "do I have the money");
|
|
416
|
+
|
|
417
|
+
testUnexpectedResult(chrono.en.GB, "do I have the money");
|
|
412
418
|
});
|
package/test/en/en_month.test.ts
CHANGED
|
@@ -70,9 +70,14 @@ test("Test - Month-Year expression", function () {
|
|
|
70
70
|
});
|
|
71
71
|
|
|
72
72
|
testSingleCase(chrono, "Statement of comprehensive income for the year ended Dec. 2021", (result) => {
|
|
73
|
+
expect(result.text).toBe("Dec. 2021");
|
|
74
|
+
|
|
73
75
|
expect(result.start.get("year")).toBe(2021);
|
|
74
76
|
expect(result.start.get("month")).toBe(12);
|
|
75
|
-
|
|
77
|
+
|
|
78
|
+
expect(result.start.isCertain("year")).toBe(true);
|
|
79
|
+
expect(result.start.isCertain("month")).toBe(true);
|
|
80
|
+
expect(result.start.isCertain("day")).toBe(false);
|
|
76
81
|
});
|
|
77
82
|
});
|
|
78
83
|
|
|
@@ -381,4 +381,6 @@ test("Test - Impossible Dates (Strict Mode)", () => {
|
|
|
381
381
|
testUnexpectedResult(chrono.strict, "August 32", new Date(2012, 7, 10));
|
|
382
382
|
|
|
383
383
|
testUnexpectedResult(chrono.strict, "February 29", new Date(2014, 7, 10));
|
|
384
|
+
|
|
385
|
+
testUnexpectedResult(chrono.strict, "February 151998", new Date(2014, 7, 10));
|
|
384
386
|
});
|
package/test/en/en_slash.test.ts
CHANGED
|
@@ -136,6 +136,21 @@ test("Test - Single Expression Little-Endian with Month name", function () {
|
|
|
136
136
|
|
|
137
137
|
expect(result.start).toBeDate(new Date(2012, 10 - 1, 8, 12));
|
|
138
138
|
});
|
|
139
|
+
|
|
140
|
+
testSingleCase(chrono.strict, "06/Nov/2023", (result) => {
|
|
141
|
+
expect(result.text).toBe("06/Nov/2023");
|
|
142
|
+
expect(result).toBeDate(new Date(2023, 11 - 1, 6, 12));
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
testSingleCase(chrono.strict, "06/Nov/2023:06:36:02", (result) => {
|
|
146
|
+
expect(result.text).toBe("06/Nov/2023:06:36:02");
|
|
147
|
+
expect(result).toBeDate(new Date(2023, 11 - 1, 6, 6, 36, 2));
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
testSingleCase(chrono.strict, "06/Nov/2023:06:36:02 +0200", (result) => {
|
|
151
|
+
expect(result.text).toBe("06/Nov/2023:06:36:02 +0200");
|
|
152
|
+
expect(result).toBeDate(new Date("Mon Nov 06 2023 06:36:02 GMT+0200"));
|
|
153
|
+
});
|
|
139
154
|
});
|
|
140
155
|
|
|
141
156
|
test("Test - Range Expression", function () {
|
|
@@ -24,6 +24,36 @@ 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
|
+
expect(result.start.get("hour")).toBe(14);
|
|
31
|
+
expect(result.start.get("minute")).toBe(15);
|
|
32
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
testSingleCase(chrono, "05/31/2024.14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
36
|
+
expect(result.text).toBe(text);
|
|
37
|
+
expect(result.start.get("hour")).toBe(14);
|
|
38
|
+
expect(result.start.get("minute")).toBe(15);
|
|
39
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
testSingleCase(chrono, "05/31/2024:14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
43
|
+
expect(result.text).toBe(text);
|
|
44
|
+
expect(result.start.get("hour")).toBe(14);
|
|
45
|
+
expect(result.start.get("minute")).toBe(15);
|
|
46
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
testSingleCase(chrono, "05/31/2024-14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
50
|
+
expect(result.text).toBe(text);
|
|
51
|
+
expect(result.start.get("hour")).toBe(14);
|
|
52
|
+
expect(result.start.get("minute")).toBe(15);
|
|
53
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
|
|
27
57
|
test("Test - Time range expression", function () {
|
|
28
58
|
testSingleCase(chrono, "10:00:00 - 21:45:00", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
29
59
|
expect(result.text).toBe(text);
|
|
@@ -249,7 +249,9 @@ test("Test - From now Expression", () => {
|
|
|
249
249
|
|
|
250
250
|
expect(result.start).toBeDate(new Date(2012, 7, 10, 14, 10));
|
|
251
251
|
});
|
|
252
|
+
});
|
|
252
253
|
|
|
254
|
+
test("Test - The later expression with multiple time units", function () {
|
|
253
255
|
testSingleCase(chrono, "in 1d 2hr 5min", new Date(2012, 7, 10, 12, 40), (result) => {
|
|
254
256
|
expect(result.index).toBe(0);
|
|
255
257
|
expect(result.text).toBe("in 1d 2hr 5min");
|
|
@@ -259,6 +261,16 @@ test("Test - From now Expression", () => {
|
|
|
259
261
|
|
|
260
262
|
expect(result.start).toBeDate(new Date(2012, 7, 11, 14, 45));
|
|
261
263
|
});
|
|
264
|
+
|
|
265
|
+
testSingleCase(chrono, "in 1d, 2hr, and 5min", new Date(2012, 7, 10, 12, 40), (result) => {
|
|
266
|
+
expect(result.index).toBe(0);
|
|
267
|
+
expect(result.text).toBe("in 1d, 2hr, and 5min");
|
|
268
|
+
expect(result.start.get("day")).toBe(11);
|
|
269
|
+
expect(result.start.get("hour")).toBe(14);
|
|
270
|
+
expect(result.start.get("minute")).toBe(45);
|
|
271
|
+
|
|
272
|
+
expect(result.start).toBeDate(new Date(2012, 7, 11, 14, 45));
|
|
273
|
+
});
|
|
262
274
|
});
|
|
263
275
|
|
|
264
276
|
test("Test - Strict mode", function () {
|
|
@@ -174,6 +174,48 @@ test("Test - The normal within expression", () => {
|
|
|
174
174
|
});
|
|
175
175
|
});
|
|
176
176
|
|
|
177
|
+
test("Test - The within expression with multiple time units", function () {
|
|
178
|
+
testSingleCase(chrono, "set a timer for 5 minutes 30 seconds", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
179
|
+
expect(result.index).toBe(12);
|
|
180
|
+
expect(result.text).toBe("for 5 minutes 30 seconds");
|
|
181
|
+
|
|
182
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 19, 30));
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
testSingleCase(chrono, "set a timer for 5 minutes, 30 seconds", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
186
|
+
expect(result.index).toBe(12);
|
|
187
|
+
expect(result.text).toBe("for 5 minutes, 30 seconds");
|
|
188
|
+
|
|
189
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 19, 30));
|
|
190
|
+
});
|
|
191
|
+
|
|
192
|
+
testSingleCase(chrono, "set a timer for 1 hour, 5 minutes, 30 seconds", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
193
|
+
expect(result.index).toBe(12);
|
|
194
|
+
expect(result.text).toBe("for 1 hour, 5 minutes, 30 seconds");
|
|
195
|
+
|
|
196
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 13, 19, 30));
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
testSingleCase(chrono, "set a timer for 5 minutes and 30 seconds", new Date(2012, 7, 10, 12, 14), (result) => {
|
|
200
|
+
expect(result.index).toBe(12);
|
|
201
|
+
expect(result.text).toBe("for 5 minutes and 30 seconds");
|
|
202
|
+
|
|
203
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 12, 19, 30));
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
testSingleCase(
|
|
207
|
+
chrono,
|
|
208
|
+
"set a timer for 1 hour, 5 minutes, and 30 seconds",
|
|
209
|
+
new Date(2012, 7, 10, 12, 14),
|
|
210
|
+
(result) => {
|
|
211
|
+
expect(result.index).toBe(12);
|
|
212
|
+
expect(result.text).toBe("for 1 hour, 5 minutes, and 30 seconds");
|
|
213
|
+
|
|
214
|
+
expect(result.start).toBeDate(new Date(2012, 7, 10, 13, 19, 30));
|
|
215
|
+
}
|
|
216
|
+
);
|
|
217
|
+
});
|
|
218
|
+
|
|
177
219
|
test("Test - The within expression with certain keywords", () => {
|
|
178
220
|
testSingleCase(chrono, "In about 5 hours", new Date(2012, 8 - 1, 10, 12, 49), (result, text) => {
|
|
179
221
|
expect(result.text).toBe(text);
|
|
@@ -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 "
|
|
2
|
-
import { testSingleCase } from "
|
|
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 "
|
|
2
|
-
import { testSingleCase } from "
|
|
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) => {
|