chrono-node
Advanced tools
Comparing version 2.3.9 to 2.4.1
@@ -32,2 +32,11 @@ import * as en from "./locales/en"; | ||
} | ||
export declare enum Weekday { | ||
SUNDAY = 0, | ||
MONDAY = 1, | ||
TUESDAY = 2, | ||
WEDNESDAY = 3, | ||
THURSDAY = 4, | ||
FRIDAY = 5, | ||
SATURDAY = 6 | ||
} | ||
import * as de from "./locales/de"; | ||
@@ -34,0 +43,0 @@ import * as fr from "./locales/fr"; |
@@ -22,3 +22,3 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.parseDate = exports.parse = exports.casual = exports.strict = exports.ru = exports.zh = exports.nl = exports.pt = exports.ja = exports.fr = exports.de = exports.Meridiem = exports.Chrono = exports.en = void 0; | ||
exports.parseDate = exports.parse = exports.casual = exports.strict = exports.ru = exports.zh = exports.nl = exports.pt = exports.ja = exports.fr = exports.de = exports.Weekday = exports.Meridiem = exports.Chrono = exports.en = void 0; | ||
const en = __importStar(require("./locales/en")); | ||
@@ -33,2 +33,12 @@ exports.en = en; | ||
})(Meridiem = exports.Meridiem || (exports.Meridiem = {})); | ||
var Weekday; | ||
(function (Weekday) { | ||
Weekday[Weekday["SUNDAY"] = 0] = "SUNDAY"; | ||
Weekday[Weekday["MONDAY"] = 1] = "MONDAY"; | ||
Weekday[Weekday["TUESDAY"] = 2] = "TUESDAY"; | ||
Weekday[Weekday["WEDNESDAY"] = 3] = "WEDNESDAY"; | ||
Weekday[Weekday["THURSDAY"] = 4] = "THURSDAY"; | ||
Weekday[Weekday["FRIDAY"] = 5] = "FRIDAY"; | ||
Weekday[Weekday["SATURDAY"] = 6] = "SATURDAY"; | ||
})(Weekday = exports.Weekday || (exports.Weekday = {})); | ||
const de = __importStar(require("./locales/de")); | ||
@@ -35,0 +45,0 @@ exports.de = de; |
@@ -6,3 +6,3 @@ "use strict"; | ||
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary"); | ||
const weeks_1 = require("../../../calculation/weeks"); | ||
const weekdays_1 = require("../../../common/calculation/weekdays"); | ||
const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" + | ||
@@ -40,9 +40,3 @@ "(?:a[mn]\\s*?)?" + | ||
} | ||
const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return weekdays_1.createParsingComponentsAtWeekday(context.reference, offset, modifier); | ||
} | ||
@@ -49,0 +43,0 @@ } |
import { OpUnitType, QUnitType } from "dayjs"; | ||
import { TimeUnits } from "../../utils/timeunits"; | ||
import { Weekday } from "../../index"; | ||
export declare const WEEKDAY_DICTIONARY: { | ||
[word: string]: number; | ||
[word: string]: Weekday; | ||
}; | ||
@@ -6,0 +7,0 @@ export declare const FULL_MONTH_NAME_DICTIONARY: { |
@@ -6,3 +6,3 @@ "use strict"; | ||
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary"); | ||
const weeks_1 = require("../../../calculation/weeks"); | ||
const weekdays_1 = require("../../../common/calculation/weekdays"); | ||
const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" + | ||
@@ -24,3 +24,3 @@ "(?:on\\s*?)?" + | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const weekday = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const prefix = match[PREFIX_GROUP]; | ||
@@ -41,9 +41,3 @@ const postfix = match[POSTFIX_GROUP]; | ||
} | ||
const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return weekdays_1.createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
@@ -50,0 +44,0 @@ } |
@@ -6,3 +6,3 @@ "use strict"; | ||
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary"); | ||
const weeks_1 = require("../../../calculation/weeks"); | ||
const weekdays_1 = require("../../../common/calculation/weekdays"); | ||
const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" + | ||
@@ -22,4 +22,4 @@ "(?:(?:ce)\\s*)?" + | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (offset === undefined) { | ||
const weekday = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (weekday === undefined) { | ||
return null; | ||
@@ -37,9 +37,3 @@ } | ||
} | ||
const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return weekdays_1.createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
@@ -46,0 +40,0 @@ } |
@@ -6,3 +6,3 @@ "use strict"; | ||
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary"); | ||
const weeks_1 = require("../../../calculation/weeks"); | ||
const weekdays_1 = require("../../../common/calculation/weekdays"); | ||
const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" + | ||
@@ -22,3 +22,3 @@ "(?:op\\s*?)?" + | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const weekday = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const prefix = match[PREFIX_GROUP]; | ||
@@ -39,9 +39,3 @@ const postfix = match[POSTFIX_GROUP]; | ||
} | ||
const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return weekdays_1.createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
@@ -48,0 +42,0 @@ } |
@@ -6,3 +6,3 @@ "use strict"; | ||
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary"); | ||
const weeks_1 = require("../../../calculation/weeks"); | ||
const weekdays_1 = require("../../../common/calculation/weekdays"); | ||
const PATTERN = new RegExp("(?:(?:\\,|\\(|\\()\\s*)?" + | ||
@@ -23,4 +23,4 @@ "(?:(este|esta|passado|pr[oó]ximo)\\s*)?" + | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (offset === undefined) { | ||
const weekday = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (weekday === undefined) { | ||
return null; | ||
@@ -42,9 +42,3 @@ } | ||
} | ||
const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return weekdays_1.createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
@@ -51,0 +45,0 @@ } |
@@ -48,5 +48,5 @@ "use strict"; | ||
январе: 1, | ||
февряль: 2, | ||
февряля: 2, | ||
февряле: 2, | ||
февраль: 2, | ||
февраля: 2, | ||
феврале: 2, | ||
март: 3, | ||
@@ -105,3 +105,3 @@ марта: 3, | ||
восемь: 8, | ||
восемьми: 8, | ||
восьми: 8, | ||
девять: 9, | ||
@@ -262,3 +262,2 @@ девяти: 9, | ||
} | ||
num = num.replace(/(?:st|nd|rd|th)$/i, ""); | ||
return parseInt(num); | ||
@@ -265,0 +264,0 @@ } |
@@ -6,3 +6,3 @@ "use strict"; | ||
const AbstractParserWithWordBoundary_1 = require("../../../common/parsers/AbstractParserWithWordBoundary"); | ||
const weeks_1 = require("../../../calculation/weeks"); | ||
const weekdays_1 = require("../../../common/calculation/weekdays"); | ||
const PATTERN = new RegExp(`(?:(?:,|\\(|()\\s*)?` + | ||
@@ -27,3 +27,3 @@ `(?:в\\s*?)?` + | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const weekday = constants_1.WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const prefix = match[PREFIX_GROUP]; | ||
@@ -47,9 +47,3 @@ const postfix = match[POSTFIX_GROUP]; | ||
} | ||
const date = weeks_1.toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return weekdays_1.createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
@@ -56,0 +50,0 @@ } |
import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMergeDateRangeRefiner"; | ||
export default class xf extends AbstractMergeDateRangeRefiner { | ||
export default class RUMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner { | ||
patternBetween(): RegExp; | ||
} |
@@ -7,3 +7,3 @@ "use strict"; | ||
const AbstractMergeDateRangeRefiner_1 = __importDefault(require("../../../common/refiners/AbstractMergeDateRangeRefiner")); | ||
class xf extends AbstractMergeDateRangeRefiner_1.default { | ||
class RUMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner_1.default { | ||
patternBetween() { | ||
@@ -13,3 +13,3 @@ return /^\s*(и до|и по|до|по|-)\s*$/i; | ||
} | ||
exports.default = xf; | ||
exports.default = RUMergeDateRangeRefiner; | ||
//# sourceMappingURL=RUMergeDateRangeRefiner.js.map |
@@ -7,2 +7,4 @@ import { Component, ParsedComponents, ParsedResult, ParsingReference } from "./index"; | ||
constructor(input?: ParsingReference | Date); | ||
getDateWithAdjustedTimezone(): Date; | ||
getSystemTimezoneAdjustmentMinute(date?: Date, overrideTimezoneOffset?: number): number; | ||
} | ||
@@ -32,3 +34,2 @@ export declare class ParsingComponents implements ParsedComponents { | ||
private dateWithoutTimezoneAdjustment; | ||
private getSystemTimezoneAdjustmentMinute; | ||
static createRelativeFromReference(reference: ReferenceWithTimezone, fragments: { | ||
@@ -35,0 +36,0 @@ [c in QUnitType]?: number; |
@@ -24,2 +24,14 @@ "use strict"; | ||
} | ||
getDateWithAdjustedTimezone() { | ||
return new Date(this.instant.getTime() + this.getSystemTimezoneAdjustmentMinute(this.instant) * 60000); | ||
} | ||
getSystemTimezoneAdjustmentMinute(date, overrideTimezoneOffset) { | ||
var _a; | ||
if (!date || date.getTime() < 0) { | ||
date = new Date(); | ||
} | ||
const currentTimezoneOffset = -date.getTimezoneOffset(); | ||
const targetTimezoneOffset = (_a = overrideTimezoneOffset !== null && overrideTimezoneOffset !== void 0 ? overrideTimezoneOffset : this.timezoneOffset) !== null && _a !== void 0 ? _a : currentTimezoneOffset; | ||
return currentTimezoneOffset - targetTimezoneOffset; | ||
} | ||
} | ||
@@ -123,3 +135,4 @@ exports.ReferenceWithTimezone = ReferenceWithTimezone; | ||
const date = this.dateWithoutTimezoneAdjustment(); | ||
return new Date(date.getTime() + this.getSystemTimezoneAdjustmentMinute(date) * 60000); | ||
const timezoneAdjustment = this.reference.getSystemTimezoneAdjustmentMinute(date, this.get("timezoneOffset")); | ||
return new Date(date.getTime() + timezoneAdjustment * 60000); | ||
} | ||
@@ -131,11 +144,2 @@ dateWithoutTimezoneAdjustment() { | ||
} | ||
getSystemTimezoneAdjustmentMinute(date) { | ||
var _a, _b; | ||
if (!date || date.getTime() < 0) { | ||
date = new Date(); | ||
} | ||
const currentTimezoneOffset = -date.getTimezoneOffset(); | ||
const targetTimezoneOffset = (_b = (_a = this.get("timezoneOffset")) !== null && _a !== void 0 ? _a : this.reference.timezoneOffset) !== null && _b !== void 0 ? _b : currentTimezoneOffset; | ||
return currentTimezoneOffset - targetTimezoneOffset; | ||
} | ||
static createRelativeFromReference(reference, fragments) { | ||
@@ -142,0 +146,0 @@ let date = dayjs_1.default(reference.instant); |
@@ -18,3 +18,3 @@ { | ||
"license": "MIT", | ||
"version": "2.3.9", | ||
"version": "2.4.1", | ||
"directories": { | ||
@@ -21,0 +21,0 @@ "source": "./src", |
@@ -143,3 +143,5 @@ import { ReferenceWithTimezone, ParsingComponents, ParsingResult } from "./results"; | ||
// Deprecated. Use reference.instant instead. | ||
/** | ||
* @deprecated. Use reference.instant instead. | ||
*/ | ||
readonly refDate: Date; | ||
@@ -146,0 +148,0 @@ |
@@ -102,2 +102,12 @@ import { DebugHandler, DebugConsume } from "./debugging"; | ||
export enum Weekday { | ||
SUNDAY = 0, | ||
MONDAY = 1, | ||
TUESDAY = 2, | ||
WEDNESDAY = 3, | ||
THURSDAY = 4, | ||
FRIDAY = 5, | ||
SATURDAY = 6, | ||
} | ||
// Export all locales | ||
@@ -104,0 +114,0 @@ import * as de from "./locales/de"; |
@@ -6,3 +6,3 @@ import { ParsingContext } from "../../../chrono"; | ||
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary"; | ||
import { toDayJSWeekday } from "../../../calculation/weeks"; | ||
import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays"; | ||
@@ -48,10 +48,4 @@ const PATTERN = new RegExp( | ||
const date = toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return createParsingComponentsAtWeekday(context.reference, offset, modifier); | ||
} | ||
} |
@@ -5,4 +5,5 @@ import { OpUnitType, QUnitType } from "dayjs"; | ||
import { TimeUnits } from "../../utils/timeunits"; | ||
import { Weekday } from "../../index"; | ||
export const WEEKDAY_DICTIONARY: { [word: string]: number } = { | ||
export const WEEKDAY_DICTIONARY: { [word: string]: Weekday } = { | ||
sunday: 0, | ||
@@ -9,0 +10,0 @@ sun: 0, |
@@ -6,3 +6,3 @@ import { ParsingContext } from "../../../chrono"; | ||
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary"; | ||
import { toDayJSWeekday } from "../../../calculation/weeks"; | ||
import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays"; | ||
@@ -31,3 +31,3 @@ const PATTERN = new RegExp( | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const weekday = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const prefix = match[PREFIX_GROUP]; | ||
@@ -48,10 +48,4 @@ const postfix = match[POSTFIX_GROUP]; | ||
const date = toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
} |
@@ -6,3 +6,3 @@ import { ParsingContext } from "../../../chrono"; | ||
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary"; | ||
import { toDayJSWeekday } from "../../../calculation/weeks"; | ||
import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays"; | ||
@@ -29,4 +29,4 @@ const PATTERN = new RegExp( | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (offset === undefined) { | ||
const weekday = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (weekday === undefined) { | ||
return null; | ||
@@ -46,10 +46,4 @@ } | ||
const date = toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
} |
@@ -6,3 +6,3 @@ import { ParsingContext } from "../../../chrono"; | ||
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary"; | ||
import { toDayJSWeekday } from "../../../calculation/weeks"; | ||
import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays"; | ||
@@ -29,3 +29,3 @@ const PATTERN = new RegExp( | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const weekday = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const prefix = match[PREFIX_GROUP]; | ||
@@ -46,10 +46,4 @@ const postfix = match[POSTFIX_GROUP]; | ||
const date = toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
} |
@@ -6,3 +6,3 @@ import { ParsingContext } from "../../../chrono"; | ||
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary"; | ||
import { toDayJSWeekday } from "../../../calculation/weeks"; | ||
import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays"; | ||
@@ -30,4 +30,4 @@ const PATTERN = new RegExp( | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (offset === undefined) { | ||
const weekday = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
if (weekday === undefined) { | ||
return null; | ||
@@ -50,10 +50,4 @@ } | ||
const date = toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
} |
@@ -50,5 +50,5 @@ import { OpUnitType, QUnitType } from "dayjs"; | ||
январе: 1, | ||
февряль: 2, | ||
февряля: 2, | ||
февряле: 2, | ||
февраль: 2, | ||
февраля: 2, | ||
феврале: 2, | ||
март: 3, | ||
@@ -129,3 +129,3 @@ марта: 3, | ||
восемь: 8, | ||
восемьми: 8, | ||
восьми: 8, | ||
девять: 9, | ||
@@ -293,4 +293,2 @@ девяти: 9, | ||
} | ||
num = num.replace(/(?:st|nd|rd|th)$/i, ""); | ||
return parseInt(num); | ||
@@ -297,0 +295,0 @@ } |
@@ -6,3 +6,3 @@ import { ParsingContext } from "../../../chrono"; | ||
import { AbstractParserWithWordBoundaryChecking } from "../../../common/parsers/AbstractParserWithWordBoundary"; | ||
import { toDayJSWeekday } from "../../../calculation/weeks"; | ||
import { createParsingComponentsAtWeekday } from "../../../common/calculation/weekdays"; | ||
@@ -35,3 +35,3 @@ const PATTERN = new RegExp( | ||
const dayOfWeek = match[WEEKDAY_GROUP].toLowerCase(); | ||
const offset = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const weekday = WEEKDAY_DICTIONARY[dayOfWeek]; | ||
const prefix = match[PREFIX_GROUP]; | ||
@@ -57,10 +57,4 @@ const postfix = match[POSTFIX_GROUP]; | ||
const date = toDayJSWeekday(context.refDate, offset, modifier); | ||
return context | ||
.createParsingComponents() | ||
.assign("weekday", offset) | ||
.imply("day", date.date()) | ||
.imply("month", date.month() + 1) | ||
.imply("year", date.year()); | ||
return createParsingComponentsAtWeekday(context.reference, weekday, modifier); | ||
} | ||
} |
@@ -9,3 +9,3 @@ import AbstractMergeDateRangeRefiner from "../../../common/refiners/AbstractMergeDateRangeRefiner"; | ||
*/ | ||
export default class xf extends AbstractMergeDateRangeRefiner { | ||
export default class RUMergeDateRangeRefiner extends AbstractMergeDateRangeRefiner { | ||
patternBetween(): RegExp { | ||
@@ -12,0 +12,0 @@ return /^\s*(и до|и по|до|по|-)\s*$/i; |
@@ -22,2 +22,27 @@ import { Component, ParsedComponents, ParsedResult, ParsingReference } from "./index"; | ||
} | ||
/** | ||
* Returns a JS date (system timezone) with the { year, month, day, hour, minute, second } equal to the reference. | ||
* The output's instant is NOT the reference's instant when the reference's and system's timezone are different. | ||
*/ | ||
getDateWithAdjustedTimezone() { | ||
return new Date(this.instant.getTime() + this.getSystemTimezoneAdjustmentMinute(this.instant) * 60000); | ||
} | ||
/** | ||
* Returns the number minutes difference between the JS date's timezone and the reference timezone. | ||
* @param date | ||
* @param overrideTimezoneOffset | ||
*/ | ||
getSystemTimezoneAdjustmentMinute(date?: Date, overrideTimezoneOffset?: number): number { | ||
if (!date || date.getTime() < 0) { | ||
// Javascript date timezone calculation got effect when the time epoch < 0 | ||
// e.g. new Date('Tue Feb 02 1300 00:00:00 GMT+0900 (JST)') => Tue Feb 02 1300 00:18:59 GMT+0918 (JST) | ||
date = new Date(); | ||
} | ||
const currentTimezoneOffset = -date.getTimezoneOffset(); | ||
const targetTimezoneOffset = overrideTimezoneOffset ?? this.timezoneOffset ?? currentTimezoneOffset; | ||
return currentTimezoneOffset - targetTimezoneOffset; | ||
} | ||
} | ||
@@ -145,3 +170,4 @@ | ||
const date = this.dateWithoutTimezoneAdjustment(); | ||
return new Date(date.getTime() + this.getSystemTimezoneAdjustmentMinute(date) * 60000); | ||
const timezoneAdjustment = this.reference.getSystemTimezoneAdjustmentMinute(date, this.get("timezoneOffset")); | ||
return new Date(date.getTime() + timezoneAdjustment * 60000); | ||
} | ||
@@ -164,16 +190,2 @@ | ||
private getSystemTimezoneAdjustmentMinute(date?: Date) { | ||
if (!date || date.getTime() < 0) { | ||
// Javascript date timezone calculation got effect when the time epoch < 0 | ||
// e.g. new Date('Tue Feb 02 1300 00:00:00 GMT+0900 (JST)') => Tue Feb 02 1300 00:18:59 GMT+0918 (JST) | ||
date = new Date(); | ||
} | ||
const currentTimezoneOffset = -date.getTimezoneOffset(); | ||
const targetTimezoneOffset = | ||
this.get("timezoneOffset") ?? this.reference.timezoneOffset ?? currentTimezoneOffset; | ||
return currentTimezoneOffset - targetTimezoneOffset; | ||
} | ||
static createRelativeFromReference( | ||
@@ -180,0 +192,0 @@ reference: ReferenceWithTimezone, |
@@ -75,3 +75,3 @@ import * as chrono from "../../src"; | ||
testSingleCase(chrono.casual, "Let's have a meeting on Friday next week", new Date(2015, 3, 18), (result) => { | ||
testSingleCase(chrono.casual, "Let's have a meeting on Friday next week", new Date("Sat Apr 18 2015"), (result) => { | ||
expect(result.index).toBe(21); | ||
@@ -108,2 +108,117 @@ expect(result.text).toBe("on Friday next week"); | ||
test("Test - Weekday casual `This` guessing", function () { | ||
testSingleCase(chrono.casual, "This Saturday", new Date("Tue Aug 2 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(6); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "This Sunday", new Date("Tue Aug 2 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(7); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "This Wednesday", new Date("Tue Aug 2 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(3); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "This Saturday", new Date("Sun Aug 7 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(13); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "This Sunday", new Date("Sun Aug 7 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(7); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "This Wednesday", new Date("Sun Aug 7 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(10); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
}); | ||
test("Test - Weekday casual `Last` guessing", function () { | ||
testSingleCase(chrono.casual, "Last Saturday", new Date("Tue Aug 2 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(30); | ||
expect(result.start.get("month")).toBe(7); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Last Sunday", new Date("Tue Aug 2 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(31); | ||
expect(result.start.get("month")).toBe(7); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Last Wednesday", new Date("Tue Aug 2 2022"), (result) => { | ||
expect(result.start.get("day")).toBe(27); | ||
expect(result.start.get("month")).toBe(7); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
}); | ||
test("Test - Weekday casual `Next` guessing", function () { | ||
{ | ||
const refDate = new Date("Tue Aug 2 2022"); | ||
testSingleCase(chrono.casual, "Next Saturday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(13); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Next Sunday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(14); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Next Wednesday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(10); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
} | ||
{ | ||
const refDate = new Date("Saturday Aug 6 2022"); | ||
testSingleCase(chrono.casual, "Next Saturday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(13); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Next Sunday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(14); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Next Wednesday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(10); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
} | ||
{ | ||
const refDate = new Date("Sun Aug 7 2022"); | ||
testSingleCase(chrono.casual, "Next Saturday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(13); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Next Sunday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(14); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
testSingleCase(chrono.casual, "Next Wednesday", refDate, (result) => { | ||
expect(result.start.get("day")).toBe(10); | ||
expect(result.start.get("month")).toBe(8); | ||
expect(result.start.get("year")).toBe(2022); | ||
}); | ||
} | ||
}); | ||
test("Test - Weekday With Casual Time", function () { | ||
@@ -110,0 +225,0 @@ testSingleCase(chrono.casual, "Lets meet on Tuesday morning", new Date(2015, 3, 18), (result) => { |
import * as chrono from "../../src"; | ||
import { testSingleCase, testUnexpectedResult } from "../test_util"; | ||
import ENTimeExpressionParser from "../../src/locales/en/parsers/ENTimeExpressionParser"; | ||
import { Meridiem } from "../../src"; | ||
@@ -98,2 +99,11 @@ test("Test - Date + Time Expression", function () { | ||
}); | ||
testSingleCase(chrono, "03-27-2022, 02:00 AM", new Date(2017, 7 - 1, 7), (result) => { | ||
expect(result.text).toBe("03-27-2022, 02:00 AM"); | ||
expect(result.start.get("day")).toBe(27); | ||
expect(result.start.get("month")).toBe(3); | ||
expect(result.start.get("year")).toBe(2022); | ||
expect(result.start.get("hour")).toBe(2); | ||
expect(result.start.get("meridiem")).toBe(Meridiem.AM); | ||
}); | ||
}); | ||
@@ -100,0 +110,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2010580
635
35608