chrono-node 2.8.1 → 2.8.3
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/README.md +1 -1
- package/dist/cjs/calculation/duration.d.ts +8 -0
- package/dist/cjs/calculation/duration.js +124 -0
- package/dist/cjs/calculation/duration.js.map +1 -0
- package/dist/cjs/{common/calculation → calculation}/weekdays.d.ts +2 -2
- package/dist/cjs/{common/calculation → calculation}/weekdays.js +3 -3
- package/dist/cjs/calculation/weekdays.js.map +1 -0
- package/dist/cjs/common/casualReferences.js +1 -1
- package/dist/cjs/common/casualReferences.js.map +1 -1
- package/dist/cjs/common/refiners/ForwardDateRefiner.js.map +1 -1
- package/dist/cjs/common/refiners/UnlikelyFormatFilter.js +0 -6
- package/dist/cjs/common/refiners/UnlikelyFormatFilter.js.map +1 -1
- package/dist/cjs/index.d.ts +2 -2
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/locales/de/parsers/DEWeekdayParser.js +1 -1
- package/dist/cjs/locales/de/parsers/DEWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js +4 -5
- package/dist/cjs/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +5 -5
- package/dist/cjs/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js +4 -0
- package/dist/cjs/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/cjs/locales/en/parsers/ENWeekdayParser.js +1 -1
- package/dist/cjs/locales/en/parsers/ENWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.js +4 -4
- package/dist/cjs/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.js.map +1 -1
- package/dist/cjs/locales/es/parsers/ESWeekdayParser.js +1 -1
- package/dist/cjs/locales/es/parsers/ESWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/fr/parsers/FRWeekdayParser.js +1 -1
- package/dist/cjs/locales/fr/parsers/FRWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.d.ts +1 -1
- package/dist/cjs/locales/it/parsers/ITRelativeDateFormatParser.js +2 -2
- package/dist/cjs/locales/it/parsers/ITWeekdayParser.js +1 -1
- package/dist/cjs/locales/it/parsers/ITWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/ja/parsers/JPWeekdayParser.js +1 -1
- package/dist/cjs/locales/ja/parsers/JPWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/ja/parsers/JPWeekdayWithParenthesesParser.js +1 -1
- package/dist/cjs/locales/ja/parsers/JPWeekdayWithParenthesesParser.js.map +1 -1
- package/dist/cjs/locales/ja/refiners/JPMergeWeekdayComponentRefiner.d.ts +1 -1
- package/dist/cjs/locales/ja/refiners/JPMergeWeekdayComponentRefiner.js +1 -1
- package/dist/cjs/locales/ja/refiners/JPMergeWeekdayComponentRefiner.js.map +1 -1
- package/dist/cjs/locales/nl/parsers/NLWeekdayParser.js +1 -1
- package/dist/cjs/locales/nl/parsers/NLWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/pt/parsers/PTWeekdayParser.js +1 -1
- package/dist/cjs/locales/pt/parsers/PTWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/ru/parsers/RUWeekdayParser.js +1 -1
- package/dist/cjs/locales/ru/parsers/RUWeekdayParser.js.map +1 -1
- package/dist/cjs/locales/uk/parsers/UKWeekdayParser.js +1 -1
- package/dist/cjs/locales/uk/parsers/UKWeekdayParser.js.map +1 -1
- package/dist/cjs/results.d.ts +3 -4
- package/dist/cjs/results.js +26 -27
- package/dist/cjs/results.js.map +1 -1
- package/dist/cjs/types.d.ts +1 -0
- package/dist/cjs/types.js.map +1 -1
- package/dist/cjs/utils/dates.d.ts +2 -0
- package/dist/cjs/utils/dates.js +16 -0
- package/dist/cjs/utils/dates.js.map +1 -1
- package/dist/cjs/utils/timeunits.js.map +1 -1
- package/dist/esm/calculation/duration.d.ts +8 -0
- package/dist/esm/calculation/duration.js +119 -0
- package/dist/esm/calculation/duration.js.map +1 -0
- package/dist/esm/{common/calculation → calculation}/weekdays.d.ts +2 -2
- package/dist/esm/{common/calculation → calculation}/weekdays.js +3 -3
- package/dist/esm/calculation/weekdays.js.map +1 -0
- package/dist/esm/common/casualReferences.js +1 -1
- package/dist/esm/common/casualReferences.js.map +1 -1
- package/dist/esm/common/refiners/ForwardDateRefiner.js.map +1 -1
- package/dist/esm/common/refiners/UnlikelyFormatFilter.js +0 -6
- package/dist/esm/common/refiners/UnlikelyFormatFilter.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/locales/de/parsers/DEWeekdayParser.js +1 -1
- package/dist/esm/locales/de/parsers/DEWeekdayParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js +4 -5
- package/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js +5 -5
- package/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js +4 -0
- package/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js.map +1 -1
- package/dist/esm/locales/en/parsers/ENWeekdayParser.js +1 -1
- package/dist/esm/locales/en/parsers/ENWeekdayParser.js.map +1 -1
- package/dist/esm/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.js +4 -4
- package/dist/esm/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.js.map +1 -1
- package/dist/esm/locales/es/parsers/ESWeekdayParser.js +1 -1
- package/dist/esm/locales/es/parsers/ESWeekdayParser.js.map +1 -1
- package/dist/esm/locales/fr/parsers/FRWeekdayParser.js +1 -1
- package/dist/esm/locales/fr/parsers/FRWeekdayParser.js.map +1 -1
- package/dist/esm/locales/it/index.js +2 -2
- package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.d.ts +1 -1
- package/dist/esm/locales/it/parsers/ITRelativeDateFormatParser.js +1 -1
- package/dist/esm/locales/it/parsers/ITWeekdayParser.js +1 -1
- package/dist/esm/locales/it/parsers/ITWeekdayParser.js.map +1 -1
- package/dist/esm/locales/ja/parsers/JPWeekdayParser.js +1 -1
- package/dist/esm/locales/ja/parsers/JPWeekdayParser.js.map +1 -1
- package/dist/esm/locales/ja/parsers/JPWeekdayWithParenthesesParser.js +1 -1
- package/dist/esm/locales/ja/parsers/JPWeekdayWithParenthesesParser.js.map +1 -1
- package/dist/esm/locales/ja/refiners/JPMergeWeekdayComponentRefiner.d.ts +1 -1
- package/dist/esm/locales/ja/refiners/JPMergeWeekdayComponentRefiner.js +1 -1
- package/dist/esm/locales/ja/refiners/JPMergeWeekdayComponentRefiner.js.map +1 -1
- package/dist/esm/locales/nl/parsers/NLWeekdayParser.js +1 -1
- package/dist/esm/locales/nl/parsers/NLWeekdayParser.js.map +1 -1
- package/dist/esm/locales/pt/parsers/PTWeekdayParser.js +1 -1
- package/dist/esm/locales/pt/parsers/PTWeekdayParser.js.map +1 -1
- package/dist/esm/locales/ru/parsers/RUWeekdayParser.js +1 -1
- package/dist/esm/locales/ru/parsers/RUWeekdayParser.js.map +1 -1
- package/dist/esm/locales/uk/parsers/UKWeekdayParser.js +1 -1
- package/dist/esm/locales/uk/parsers/UKWeekdayParser.js.map +1 -1
- package/dist/esm/results.d.ts +3 -4
- package/dist/esm/results.js +23 -24
- package/dist/esm/results.js.map +1 -1
- package/dist/esm/types.d.ts +1 -0
- package/dist/esm/types.js.map +1 -1
- package/dist/esm/utils/dates.d.ts +2 -0
- package/dist/esm/utils/dates.js +14 -0
- package/dist/esm/utils/dates.js.map +1 -1
- package/dist/esm/utils/timeunits.js.map +1 -1
- package/package.json +1 -1
- package/src/calculation/duration.ts +143 -0
- package/src/{common/calculation → calculation}/weekdays.ts +3 -3
- package/src/common/casualReferences.ts +1 -1
- package/src/common/refiners/ForwardDateRefiner.ts +0 -1
- package/src/common/refiners/UnlikelyFormatFilter.ts +0 -8
- package/src/index.ts +2 -2
- package/src/locales/de/parsers/DEWeekdayParser.ts +1 -1
- package/src/locales/en/parsers/ENTimeUnitAgoFormatParser.ts +4 -5
- package/src/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.ts +5 -5
- package/src/locales/en/parsers/ENTimeUnitWithinFormatParser.ts +5 -0
- package/src/locales/en/parsers/ENWeekdayParser.ts +1 -1
- package/src/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.ts +4 -4
- package/src/locales/es/parsers/ESWeekdayParser.ts +1 -1
- package/src/locales/fr/parsers/FRWeekdayParser.ts +1 -1
- package/src/locales/it/index.ts +2 -2
- package/src/locales/it/parsers/ITRelativeDateFormatParser.ts +1 -1
- package/src/locales/it/parsers/ITWeekdayParser.ts +1 -1
- package/src/locales/ja/parsers/JPWeekdayParser.ts +1 -1
- package/src/locales/ja/parsers/JPWeekdayWithParenthesesParser.ts +1 -1
- package/src/locales/ja/refiners/JPMergeWeekdayComponentRefiner.ts +1 -1
- package/src/locales/nl/parsers/NLWeekdayParser.ts +1 -1
- package/src/locales/pt/parsers/PTWeekdayParser.ts +1 -1
- package/src/locales/ru/parsers/RUWeekdayParser.ts +1 -1
- package/src/locales/uk/parsers/UKWeekdayParser.ts +1 -1
- package/src/results.ts +23 -27
- package/src/types.ts +2 -0
- package/src/utils/dates.ts +26 -0
- package/src/utils/timeunits.ts +9 -0
- package/test/calculation_duration.test.ts +165 -0
- package/test/{calculation.test.ts → calculation_weekdays.test.ts} +1 -1
- package/test/en/en_month_name_little_endian.test.ts +19 -0
- package/test/en/en_time_exp.test.ts +14 -0
- package/test/en/en_year.test.ts +38 -0
- package/test/en/negative_cases.test.ts +5 -0
- package/dist/cjs/common/calculation/weekdays.js.map +0 -1
- package/dist/esm/common/calculation/weekdays.js.map +0 -1
package/src/results.ts
CHANGED
|
@@ -2,8 +2,9 @@ import { Component, ParsedComponents, ParsedResult, ParsingReference } from "./t
|
|
|
2
2
|
|
|
3
3
|
import quarterOfYear from "dayjs/plugin/quarterOfYear";
|
|
4
4
|
import dayjs, { QUnitType } from "dayjs";
|
|
5
|
-
import { assignSimilarDate, assignSimilarTime, implySimilarTime } from "./utils/
|
|
5
|
+
import { assignSimilarDate, assignSimilarTime, implySimilarTime } from "./utils/dates";
|
|
6
6
|
import { toTimezoneOffset } from "./timezone";
|
|
7
|
+
import { addDuration, Duration } from "./calculation/duration";
|
|
7
8
|
dayjs.extend(quarterOfYear);
|
|
8
9
|
|
|
9
10
|
export class ReferenceWithTimezone {
|
|
@@ -215,18 +216,12 @@ export class ParsingComponents implements ParsedComponents {
|
|
|
215
216
|
return date;
|
|
216
217
|
}
|
|
217
218
|
|
|
218
|
-
static createRelativeFromReference(
|
|
219
|
-
reference
|
|
220
|
-
fragments: { [c in QUnitType]?: number }
|
|
221
|
-
): ParsingComponents {
|
|
222
|
-
let date = dayjs(reference.getDateWithAdjustedTimezone());
|
|
223
|
-
for (const key in fragments) {
|
|
224
|
-
date = date.add(fragments[key as QUnitType], key as QUnitType);
|
|
225
|
-
}
|
|
219
|
+
static createRelativeFromReference(reference: ReferenceWithTimezone, duration: Duration): ParsingComponents {
|
|
220
|
+
let date = addDuration(reference.getDateWithAdjustedTimezone(), duration);
|
|
226
221
|
|
|
227
222
|
const components = new ParsingComponents(reference);
|
|
228
223
|
components.addTag("result/relativeDate");
|
|
229
|
-
if (
|
|
224
|
+
if (duration["hour"] || duration["minute"] || duration["second"]) {
|
|
230
225
|
components.addTag("result/relativeDateAndTime");
|
|
231
226
|
assignSimilarTime(components, date);
|
|
232
227
|
assignSimilarDate(components, date);
|
|
@@ -235,26 +230,27 @@ export class ParsingComponents implements ParsedComponents {
|
|
|
235
230
|
implySimilarTime(components, date);
|
|
236
231
|
components.imply("timezoneOffset", reference.getTimezoneOffset());
|
|
237
232
|
|
|
238
|
-
if (
|
|
239
|
-
components.assign("day", date.
|
|
240
|
-
components.assign("month", date.
|
|
241
|
-
components.assign("year", date.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
components.assign("
|
|
245
|
-
components.assign("
|
|
246
|
-
components.
|
|
233
|
+
if (duration["day"]) {
|
|
234
|
+
components.assign("day", date.getDate());
|
|
235
|
+
components.assign("month", date.getMonth() + 1);
|
|
236
|
+
components.assign("year", date.getFullYear());
|
|
237
|
+
components.assign("weekday", date.getDay());
|
|
238
|
+
} else if (duration["week"]) {
|
|
239
|
+
components.assign("day", date.getDate());
|
|
240
|
+
components.assign("month", date.getMonth() + 1);
|
|
241
|
+
components.assign("year", date.getFullYear());
|
|
242
|
+
components.imply("weekday", date.getDay());
|
|
247
243
|
} else {
|
|
248
|
-
components.imply("day", date.
|
|
249
|
-
if (
|
|
250
|
-
components.assign("month", date.
|
|
251
|
-
components.assign("year", date.
|
|
244
|
+
components.imply("day", date.getDate());
|
|
245
|
+
if (duration["month"]) {
|
|
246
|
+
components.assign("month", date.getMonth() + 1);
|
|
247
|
+
components.assign("year", date.getFullYear());
|
|
252
248
|
} else {
|
|
253
|
-
components.imply("month", date.
|
|
254
|
-
if (
|
|
255
|
-
components.assign("year", date.
|
|
249
|
+
components.imply("month", date.getMonth() + 1);
|
|
250
|
+
if (duration["year"]) {
|
|
251
|
+
components.assign("year", date.getFullYear());
|
|
256
252
|
} else {
|
|
257
|
-
components.imply("year", date.
|
|
253
|
+
components.imply("year", date.getFullYear());
|
|
258
254
|
}
|
|
259
255
|
}
|
|
260
256
|
}
|
package/src/types.ts
CHANGED
package/src/utils/dates.ts
CHANGED
|
@@ -1,4 +1,29 @@
|
|
|
1
1
|
import { ParsingComponents } from "../results";
|
|
2
|
+
import { Meridiem } from "../types";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Assign (force update) the parsing component to the same day as the `target`.
|
|
6
|
+
* @param component the component to be updated.
|
|
7
|
+
* @param target the target date with timezone adjusted.
|
|
8
|
+
*/
|
|
9
|
+
export function assignSimilarDate(component: ParsingComponents, target: Date) {
|
|
10
|
+
component.assign("day", target.getDate());
|
|
11
|
+
component.assign("month", target.getMonth() + 1);
|
|
12
|
+
component.assign("year", target.getFullYear());
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Assign (force update) the parsing component to the same time as the `target`.
|
|
17
|
+
* @param component the component to be updated.
|
|
18
|
+
* @param target the target date with timezone adjusted.
|
|
19
|
+
*/
|
|
20
|
+
export function assignSimilarTime(component: ParsingComponents, target: Date) {
|
|
21
|
+
component.assign("hour", target.getHours());
|
|
22
|
+
component.assign("minute", target.getMinutes());
|
|
23
|
+
component.assign("second", target.getSeconds());
|
|
24
|
+
component.assign("millisecond", target.getMilliseconds());
|
|
25
|
+
component.assign("meridiem", target.getHours() < 12 ? Meridiem.AM : Meridiem.PM);
|
|
26
|
+
}
|
|
2
27
|
|
|
3
28
|
/**
|
|
4
29
|
* Imply (weakly update) the parsing component to the same day as the `target`.
|
|
@@ -21,4 +46,5 @@ export function implySimilarTime(component: ParsingComponents, target: Date) {
|
|
|
21
46
|
component.imply("minute", target.getMinutes());
|
|
22
47
|
component.imply("second", target.getSeconds());
|
|
23
48
|
component.imply("millisecond", target.getMilliseconds());
|
|
49
|
+
component.imply("meridiem", target.getHours() < 12 ? Meridiem.AM : Meridiem.PM);
|
|
24
50
|
}
|
package/src/utils/timeunits.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
import { OpUnitType, QUnitType } from "dayjs";
|
|
2
2
|
import { ParsingComponents } from "../results";
|
|
3
3
|
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated Use `calculation.duration.Duration`.
|
|
6
|
+
*/
|
|
4
7
|
export type TimeUnits = { [c in OpUnitType | QUnitType]?: number };
|
|
5
8
|
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated Use `calculation.duration.*`.
|
|
11
|
+
*/
|
|
6
12
|
export function reverseTimeUnits(timeUnits: TimeUnits): TimeUnits {
|
|
7
13
|
const reversed = {};
|
|
8
14
|
for (const key in timeUnits) {
|
|
@@ -13,6 +19,9 @@ export function reverseTimeUnits(timeUnits: TimeUnits): TimeUnits {
|
|
|
13
19
|
return reversed as TimeUnits;
|
|
14
20
|
}
|
|
15
21
|
|
|
22
|
+
/**
|
|
23
|
+
* @deprecated Use `calculation.duration.*`.
|
|
24
|
+
*/
|
|
16
25
|
export function addImpliedTimeUnits(components: ParsingComponents, timeUnits: TimeUnits): ParsingComponents {
|
|
17
26
|
const output = components.clone();
|
|
18
27
|
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { addDuration, reverseDuration } from "../src/calculation/duration";
|
|
2
|
+
|
|
3
|
+
test("Test - Adding Duration w/ single timeunit", () => {
|
|
4
|
+
{
|
|
5
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
6
|
+
const output = addDuration(reference, { "year": 1 });
|
|
7
|
+
expect(output).toStrictEqual(new Date("Sun, Aug 27 2023 12:52:11"));
|
|
8
|
+
}
|
|
9
|
+
{
|
|
10
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
11
|
+
const output = addDuration(reference, { "month": 1 });
|
|
12
|
+
expect(output).toStrictEqual(new Date("Wed, Sep 27 2022 12:52:11"));
|
|
13
|
+
}
|
|
14
|
+
{
|
|
15
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
16
|
+
const output = addDuration(reference, { "week": 1 });
|
|
17
|
+
expect(output).toStrictEqual(new Date("Sat, Sep 3 2022 12:52:11"));
|
|
18
|
+
}
|
|
19
|
+
{
|
|
20
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
21
|
+
const output = addDuration(reference, { "day": 1 });
|
|
22
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 28 2022 12:52:11"));
|
|
23
|
+
}
|
|
24
|
+
{
|
|
25
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
26
|
+
const output = addDuration(reference, { "hour": 1 });
|
|
27
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 13:52:11"));
|
|
28
|
+
}
|
|
29
|
+
{
|
|
30
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
31
|
+
const output = addDuration(reference, { "minute": 1 });
|
|
32
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:53:11"));
|
|
33
|
+
}
|
|
34
|
+
{
|
|
35
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
36
|
+
const output = addDuration(reference, { "second": 1 });
|
|
37
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:12"));
|
|
38
|
+
}
|
|
39
|
+
{
|
|
40
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11:00");
|
|
41
|
+
const output = addDuration(reference, { "millisecond": 1 });
|
|
42
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:11:01"));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
test("Test - Adding Duration w/ single timeunit shorten", () => {
|
|
47
|
+
{
|
|
48
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
49
|
+
const output = addDuration(reference, { "y": 1 });
|
|
50
|
+
expect(output).toStrictEqual(new Date("Sun, Aug 27 2023 12:52:11"));
|
|
51
|
+
}
|
|
52
|
+
{
|
|
53
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
54
|
+
const output = addDuration(reference, { "M": 1 });
|
|
55
|
+
expect(output).toStrictEqual(new Date("Wed, Sep 27 2022 12:52:11"));
|
|
56
|
+
}
|
|
57
|
+
{
|
|
58
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
59
|
+
const output = addDuration(reference, { "w": 1 });
|
|
60
|
+
expect(output).toStrictEqual(new Date("Sat, Sep 3 2022 12:52:11"));
|
|
61
|
+
}
|
|
62
|
+
{
|
|
63
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
64
|
+
const output = addDuration(reference, { "d": 1 });
|
|
65
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 28 2022 12:52:11"));
|
|
66
|
+
}
|
|
67
|
+
{
|
|
68
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
69
|
+
const output = addDuration(reference, { "h": 1 });
|
|
70
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 13:52:11"));
|
|
71
|
+
}
|
|
72
|
+
{
|
|
73
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
74
|
+
const output = addDuration(reference, { "m": 1 });
|
|
75
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:53:11"));
|
|
76
|
+
}
|
|
77
|
+
{
|
|
78
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
79
|
+
const output = addDuration(reference, { "s": 1 });
|
|
80
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:12"));
|
|
81
|
+
}
|
|
82
|
+
{
|
|
83
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11:00");
|
|
84
|
+
const output = addDuration(reference, { "ms": 1 });
|
|
85
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:11:01"));
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
test("Test - Adding Duration w/ multiple timeunits", () => {
|
|
90
|
+
{
|
|
91
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
92
|
+
const output = addDuration(reference, { "month": 1, "day": 4 });
|
|
93
|
+
expect(output).toStrictEqual(new Date("Wed, Oct 1 2022 12:52:11"));
|
|
94
|
+
}
|
|
95
|
+
{
|
|
96
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
97
|
+
const output = addDuration(reference, { "month": 1, "day": 4, "hour": 12 });
|
|
98
|
+
expect(output).toStrictEqual(new Date("Wed, Oct 2 2022 00:52:11"));
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
test("Test - Adding Duration w/ fractions", () => {
|
|
103
|
+
{
|
|
104
|
+
// 0.5 year (aka. half year) => 6 months
|
|
105
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
106
|
+
const output = addDuration(reference, { "year": 0.5 });
|
|
107
|
+
expect(output).toStrictEqual(new Date("Mon, Feb 27 2023 12:52:11"));
|
|
108
|
+
}
|
|
109
|
+
{
|
|
110
|
+
// 0.5 month => 2 weeks
|
|
111
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
112
|
+
const output = addDuration(reference, { "month": 0.5 });
|
|
113
|
+
expect(output).toStrictEqual(new Date("Sat, Sep 10 2022 12:52:11"));
|
|
114
|
+
}
|
|
115
|
+
{
|
|
116
|
+
// 0.5 week => 4 days (actually 3.5 days, but we round up to 4 days)
|
|
117
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
118
|
+
const output = addDuration(reference, { "week": 0.5 });
|
|
119
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 31 2022 12:52:11"));
|
|
120
|
+
}
|
|
121
|
+
{
|
|
122
|
+
// 0.5 day (aka. half day) => 12 hours
|
|
123
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
124
|
+
const output = addDuration(reference, { "day": 0.5 });
|
|
125
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 28 2022 00:52:11"));
|
|
126
|
+
}
|
|
127
|
+
{
|
|
128
|
+
// 0.5 hour (aka. half hour) => 30 minutes
|
|
129
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
130
|
+
const output = addDuration(reference, { "hour": 0.5 });
|
|
131
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 13:22:11"));
|
|
132
|
+
}
|
|
133
|
+
{
|
|
134
|
+
// 0.5 minute (aka. half minute) => 30 seconds
|
|
135
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
136
|
+
const output = addDuration(reference, { "minute": 0.5 });
|
|
137
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:41"));
|
|
138
|
+
}
|
|
139
|
+
{
|
|
140
|
+
// 0.5 second (aka. half second) => 500 milliseconds
|
|
141
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11:00");
|
|
142
|
+
const output = addDuration(reference, { "second": 0.5 });
|
|
143
|
+
expect(output).toStrictEqual(new Date("Sat, Aug 27 2022 12:52:11:500"));
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
test("Test - Adding Duration w/ multiple fractions", () => {
|
|
148
|
+
{
|
|
149
|
+
// 0.5 year (aka. half year) => 6 months
|
|
150
|
+
const reference = new Date("Sat, Aug 27 2022 12:52:11");
|
|
151
|
+
const output = addDuration(reference, { "year": 0.5, "month": 2 });
|
|
152
|
+
expect(output).toStrictEqual(new Date("Thu, April 27 2023 12:52:11"));
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
test("Test - Reverse Duration", () => {
|
|
157
|
+
{
|
|
158
|
+
const timeunits = { year: 5, month: 5 };
|
|
159
|
+
expect(reverseDuration(timeunits)).toStrictEqual({ year: -5, month: -5 });
|
|
160
|
+
}
|
|
161
|
+
{
|
|
162
|
+
const timeunits = { year: -5, month: -5 };
|
|
163
|
+
expect(reverseDuration(timeunits)).toStrictEqual({ year: 5, month: 5 });
|
|
164
|
+
}
|
|
165
|
+
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createParsingComponentsAtWeekday, getDaysToWeekday } from "../src/
|
|
1
|
+
import { createParsingComponentsAtWeekday, getDaysToWeekday } from "../src/calculation/weekdays";
|
|
2
2
|
import { Weekday } from "../src";
|
|
3
3
|
import { ReferenceWithTimezone } from "../src/results";
|
|
4
4
|
|
|
@@ -212,6 +212,25 @@ test("Test - Range expression", () => {
|
|
|
212
212
|
expect(result.end).toBeDate(new Date(2013, 9 - 1, 12, 12));
|
|
213
213
|
});
|
|
214
214
|
|
|
215
|
+
testSingleCase(chrono, "10 August 2013 - 12 September", new Date(2012, 7, 10), (result) => {
|
|
216
|
+
expect(result.index).toBe(0);
|
|
217
|
+
expect(result.text).toBe("10 August 2013 - 12 September");
|
|
218
|
+
|
|
219
|
+
expect(result.start).not.toBeNull();
|
|
220
|
+
expect(result.start.get("year")).toBe(2013);
|
|
221
|
+
expect(result.start.get("month")).toBe(8);
|
|
222
|
+
expect(result.start.get("day")).toBe(10);
|
|
223
|
+
|
|
224
|
+
expect(result.start).toBeDate(new Date(2013, 8 - 1, 10, 12));
|
|
225
|
+
|
|
226
|
+
expect(result.end).not.toBeNull();
|
|
227
|
+
expect(result.end.get("year")).toBe(2013);
|
|
228
|
+
expect(result.end.get("month")).toBe(9);
|
|
229
|
+
expect(result.end.get("day")).toBe(12);
|
|
230
|
+
|
|
231
|
+
expect(result.end).toBeDate(new Date(2013, 9 - 1, 12, 12));
|
|
232
|
+
});
|
|
233
|
+
|
|
215
234
|
testSingleCase(chrono, " 17 August 2013 to 19 August 2013", new Date(2012, 7, 10), (result) => {
|
|
216
235
|
expect(result.text).toBe("17 August 2013 to 19 August 2013");
|
|
217
236
|
|
|
@@ -27,6 +27,20 @@ test("Test - Time expression", function () {
|
|
|
27
27
|
});
|
|
28
28
|
});
|
|
29
29
|
|
|
30
|
+
test("Test - Time expression with clues", () => {
|
|
31
|
+
testSingleCase(chrono, "1 at night", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
32
|
+
expect(result.text).toBe(text);
|
|
33
|
+
expect(result.start.get("hour")).toBe(1);
|
|
34
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
testSingleCase(chrono, "1 in the afternoon", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
38
|
+
expect(result.text).toBe(text);
|
|
39
|
+
expect(result.start.get("hour")).toBe(13);
|
|
40
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.PM);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
|
|
30
44
|
test("Test - Time expression after date", function () {
|
|
31
45
|
testSingleCase(chrono, "05/31/2024 14:15", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
32
46
|
expect(result.text).toBe(text);
|
package/test/en/en_year.test.ts
CHANGED
|
@@ -98,3 +98,41 @@ test("Test - Year number after date/time expression", () => {
|
|
|
98
98
|
expect(result.start.get("timezoneOffset")).toBe(-240);
|
|
99
99
|
});
|
|
100
100
|
});
|
|
101
|
+
|
|
102
|
+
test("Test - Year number after date/time range expression", () => {
|
|
103
|
+
testSingleCase(chrono, "Thu Oct 26 - 28, 11:00:09 2023", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
104
|
+
expect(result.start.get("year")).toBe(2023);
|
|
105
|
+
expect(result.start.get("month")).toBe(10);
|
|
106
|
+
expect(result.start.get("day")).toBe(26);
|
|
107
|
+
expect(result.start.get("hour")).toBe(11);
|
|
108
|
+
expect(result.start.get("minute")).toBe(0);
|
|
109
|
+
expect(result.start.get("second")).toBe(9);
|
|
110
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
111
|
+
|
|
112
|
+
expect(result.end.get("year")).toBe(2023);
|
|
113
|
+
expect(result.end.get("month")).toBe(10);
|
|
114
|
+
expect(result.end.get("day")).toBe(28);
|
|
115
|
+
expect(result.end.get("hour")).toBe(11);
|
|
116
|
+
expect(result.end.get("minute")).toBe(0);
|
|
117
|
+
expect(result.end.get("second")).toBe(9);
|
|
118
|
+
expect(result.end.get("meridiem")).toBe(Meridiem.AM);
|
|
119
|
+
});
|
|
120
|
+
|
|
121
|
+
testSingleCase(chrono, "Thu Oct 26, 10:00 - 11:00:09 2023", new Date(2016, 10 - 1, 1, 8), (result, text) => {
|
|
122
|
+
expect(result.start.get("year")).toBe(2023);
|
|
123
|
+
expect(result.start.get("month")).toBe(10);
|
|
124
|
+
expect(result.start.get("day")).toBe(26);
|
|
125
|
+
expect(result.start.get("hour")).toBe(10);
|
|
126
|
+
expect(result.start.get("minute")).toBe(0);
|
|
127
|
+
expect(result.start.get("second")).toBe(0);
|
|
128
|
+
expect(result.start.get("meridiem")).toBe(Meridiem.AM);
|
|
129
|
+
|
|
130
|
+
expect(result.end.get("year")).toBe(2023);
|
|
131
|
+
expect(result.end.get("month")).toBe(10);
|
|
132
|
+
expect(result.end.get("day")).toBe(26);
|
|
133
|
+
expect(result.end.get("hour")).toBe(11);
|
|
134
|
+
expect(result.end.get("minute")).toBe(0);
|
|
135
|
+
expect(result.end.get("second")).toBe(9);
|
|
136
|
+
expect(result.end.get("meridiem")).toBe(Meridiem.AM);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
@@ -67,6 +67,11 @@ test("Test - Skip impossible dates/times", () => {
|
|
|
67
67
|
testUnexpectedResult(chrono, "An appointment on 13/31/2018");
|
|
68
68
|
});
|
|
69
69
|
|
|
70
|
+
test("Test - Skip impossible dates/times ranges", () => {
|
|
71
|
+
testUnexpectedResult(chrono, "February 20 - 29, 2022");
|
|
72
|
+
testUnexpectedResult(chrono, "June 10 - 31, 2022");
|
|
73
|
+
});
|
|
74
|
+
|
|
70
75
|
test("Test - Skip version number pattern", () => {
|
|
71
76
|
testUnexpectedResult(chrono, "Version: 1.1.3");
|
|
72
77
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"weekdays.js","sourceRoot":"","sources":["../../../../src/common/calculation/weekdays.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"weekdays.js","sourceRoot":"","sources":["../../../../src/common/calculation/weekdays.ts"],"names":[],"mappings":"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"}
|