diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f0921af2..55a68472 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -10,7 +10,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: "15" + node-version: "18" - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn config get cacheFolder)" diff --git a/__tests__/calculations.test.ts b/__tests__/calculations.test.ts index 569f0ece..de5e6f10 100644 --- a/__tests__/calculations.test.ts +++ b/__tests__/calculations.test.ts @@ -108,18 +108,23 @@ describe("DateTime calculations", () => { }); utilsTest("startOfWeekNonISO", (date, utils, lib) => { - expect(utils.formatByString(utils.startOfWeek(utils.date("2018-10-28T00:00:00.000Z")), formats.dateTime[lib])).toBe( - lib === "Luxon" ? "2018-10-22 00:00" : "2018-10-28 00:00" - ); + expect( + utils.formatByString( + utils.startOfWeek(utils.date("2018-10-28T00:00:00.000Z")), + formats.dateTime[lib] + ) + ).toBe(lib === "Luxon" ? "2018-10-22 00:00" : "2018-10-28 00:00"); }); utilsTest("endOfWeekNonISO", (date, utils, lib) => { - expect(utils.formatByString(utils.endOfWeek(utils.date("2018-10-28T00:00:00.000Z")), formats.dateTime[lib])).toBe( - lib === "Luxon" ? "2018-10-28 23:59" : "2018-11-03 23:59" - ); + expect( + utils.formatByString( + utils.endOfWeek(utils.date("2018-10-28T00:00:00.000Z")), + formats.dateTime[lib] + ) + ).toBe(lib === "Luxon" ? "2018-10-28 23:59" : "2018-11-03 23:59"); }); - utilsTest("getPreviousMonth", (date, utils, lib) => { expect( utils.formatByString(utils.getPreviousMonth(date), formats.dateTime[lib]) @@ -243,6 +248,13 @@ describe("DateTime calculations", () => { expect(utils.isBefore(utils.date(), date)).toBeFalsy(); }); + utilsTest("isBeforeDay", (date, utils, lib) => { + const previousDay = utils.addDays(date, -1); + + expect(utils.isBeforeDay(date, previousDay)).toBeFalsy(); + expect(utils.isBeforeDay(previousDay, date)).toBeTruthy(); + }); + utilsTest("isAfterDay", (date, utils, lib) => { const nextDay = utils.addDays(date, 1); @@ -250,11 +262,18 @@ describe("DateTime calculations", () => { expect(utils.isAfterDay(date, nextDay)).toBeFalsy(); }); - utilsTest("isBeforeDay", (date, utils, lib) => { - const previousDay = utils.addDays(date, -1); + utilsTest("isBeforeMonth", (date, utils, lib) => { + const previousMonth = utils.addMonths(date, -1); - expect(utils.isBeforeDay(date, previousDay)).toBeFalsy(); - expect(utils.isBeforeDay(previousDay, date)).toBeTruthy(); + expect(utils.isBeforeMonth(date, previousMonth)).toBeFalsy(); + expect(utils.isBeforeMonth(previousMonth, date)).toBeTruthy(); + }); + + utilsTest("isAfterMonth", (date, utils, lib) => { + const next = utils.addMonths(date, 1); + + expect(utils.isAfterMonth(date, next)).toBeFalsy(); + expect(utils.isAfterMonth(next, date)).toBeTruthy(); }); utilsTest("isAfterYear", (date, utils, lib) => { diff --git a/__tests__/date-fns-jalali.test.ts b/__tests__/date-fns-jalali.test.ts index 82745ff0..e4729b77 100644 --- a/__tests__/date-fns-jalali.test.ts +++ b/__tests__/date-fns-jalali.test.ts @@ -234,6 +234,20 @@ describe("DateFnsJalali", () => { }); it("DateFnsJalali -- isBeforeDay", () => { + const previousMonth = utils.addMonths(date, -1); + + expect(utils.isBeforeMonth(date, previousMonth)).toBeFalsy(); + expect(utils.isBeforeMonth(previousMonth, date)).toBeTruthy(); + }); + + it("DateFnsJalali -- isAfterMonth", () => { + const nextMonth = utils.addMonths(date, 1); + + expect(utils.isAfterMonth(nextMonth, date)).toBeTruthy(); + expect(utils.isAfterMonth(date, nextMonth)).toBeFalsy(); + }); + + it("DateFnsJalali -- isBeforeMonth", () => { const previousDay = utils.addDays(date, -1); expect(utils.isBeforeDay(date, previousDay)).toBeFalsy(); @@ -335,7 +349,7 @@ describe("DateFnsJalali", () => { it("DateFnsJalali -- parseISO", () => { const parsedDate = utils.parseISO(TEST_TIMESTAMP); - expect(utils.toISO(parsedDate)).toEqual(TEST_TIMESTAMP.replace(".000Z", "Z")) + expect(utils.toISO(parsedDate)).toEqual(TEST_TIMESTAMP.replace(".000Z", "Z")); }); it("DateFnsJalali -- isNull", () => { diff --git a/packages/core/IUtils.d.ts b/packages/core/IUtils.d.ts index 6b0954ce..d758442d 100644 --- a/packages/core/IUtils.d.ts +++ b/packages/core/IUtils.d.ts @@ -101,11 +101,13 @@ export interface IUtils { isAfter(value: TDate, comparing: TDate): boolean; isAfterDay(value: TDate, comparing: TDate): boolean; + isAfterMonth(value: TDate, comparing: TDate): boolean; isAfterYear(value: TDate, comparing: TDate): boolean; + isBefore(value: TDate, comparing: TDate): boolean; isBeforeDay(value: TDate, comparing: TDate): boolean; + isBeforeMonth(value: TDate, comparing: TDate): boolean; isBeforeYear(value: TDate, comparing: TDate): boolean; - isBefore(value: TDate, comparing: TDate): boolean; isWithinRange(value: TDate, range: [TDate, TDate]): boolean; diff --git a/packages/date-fns-jalali/src/date-fns-jalali-utils.ts b/packages/date-fns-jalali/src/date-fns-jalali-utils.ts index ad370314..144f17e0 100644 --- a/packages/date-fns-jalali/src/date-fns-jalali-utils.ts +++ b/packages/date-fns-jalali/src/date-fns-jalali-utils.ts @@ -358,6 +358,14 @@ export default class DateFnsJalaliUtils implements IUtils { return isBefore(date, startOfYear(value)); }; + public isBeforeMonth(value: Date, comparing: Date): boolean { + return isBefore(value, startOfMonth(comparing)); + } + + public isAfterMonth(value: Date, comparing: Date): boolean { + return isAfter(value, startOfMonth(comparing)); + } + public isAfterYear = (date: Date, value: Date) => { return isAfter(date, endOfYear(value)); }; diff --git a/packages/date-fns/src/date-fns-utils.ts b/packages/date-fns/src/date-fns-utils.ts index e8a573a6..3c03a02f 100644 --- a/packages/date-fns/src/date-fns-utils.ts +++ b/packages/date-fns/src/date-fns-utils.ts @@ -337,6 +337,14 @@ export default class DateFnsUtils implements IUtils { return isBefore(date, startOfYear(value)); }; + public isBeforeMonth(value: Date, comparing: Date): boolean { + return isBefore(value, startOfMonth(comparing)); + } + + public isAfterMonth(value: Date, comparing: Date): boolean { + return isAfter(value, startOfMonth(comparing)); + } + public isAfterYear = (date: Date, value: Date) => { return isAfter(date, endOfYear(value)); }; diff --git a/packages/dayjs/src/dayjs-utils.ts b/packages/dayjs/src/dayjs-utils.ts index 0659e853..3c8bc14f 100644 --- a/packages/dayjs/src/dayjs-utils.ts +++ b/packages/dayjs/src/dayjs-utils.ts @@ -153,6 +153,14 @@ export default class DayjsUtils implements IUtils { + return date.isAfter(value, "month"); + }; + + public isBeforeMonth = (date: Dayjs, value: Dayjs) => { + return date.isBefore(value, "month"); + }; + public isBeforeYear = (date: Dayjs, value: Dayjs) => { return date.isBefore(value, "year"); }; diff --git a/packages/js-joda/src/js-joda-utils.ts b/packages/js-joda/src/js-joda-utils.ts index 2423343d..0d875e20 100644 --- a/packages/js-joda/src/js-joda-utils.ts +++ b/packages/js-joda/src/js-joda-utils.ts @@ -295,6 +295,14 @@ export default class JsJodaUtils implements IUtils { return datedate.isBefore(valuedate); } + isBeforeMonth(value: Temporal, comparing: Temporal): boolean { + return YearMonth.from(value).isBefore(YearMonth.from(comparing)); + } + + isAfterMonth(value: Temporal, comparing: Temporal): boolean { + return YearMonth.from(value).isAfter(YearMonth.from(comparing)); + } + isBeforeYear(date: Temporal, value: Temporal): boolean { let datedate = Year.from(date); let valuedate = Year.from(value); diff --git a/packages/luxon/src/luxon-utils.ts b/packages/luxon/src/luxon-utils.ts index 0601b29a..a224ede8 100644 --- a/packages/luxon/src/luxon-utils.ts +++ b/packages/luxon/src/luxon-utils.ts @@ -192,6 +192,16 @@ export default class LuxonUtils implements IUtils { return diff.days! > 0; }; + public isBeforeMonth = (value: DateTime, comparing: DateTime) => { + const diff = value.diff(comparing.startOf("month"), "months").toObject(); + return diff.months! < 0; + }; + + public isAfterMonth = (value: DateTime, comparing: DateTime) => { + const diff = value.diff(comparing.startOf("month"), "months").toObject(); + return diff.months! > 0; + }; + public isBeforeYear = (value: DateTime, comparing: DateTime) => { const diff = value.diff(comparing.startOf("year"), "years").toObject(); return diff.years! < 0; @@ -339,7 +349,7 @@ export default class LuxonUtils implements IUtils { }; public getWeekdays = () => { - return Info.weekdaysFormat("narrow", { locale: this.locale }); + return Info.weekdaysFormat("short", { locale: this.locale }); }; public getWeekArray = (date: DateTime) => { diff --git a/packages/moment/src/moment-utils.ts b/packages/moment/src/moment-utils.ts index c257ea33..44963630 100644 --- a/packages/moment/src/moment-utils.ts +++ b/packages/moment/src/moment-utils.ts @@ -144,6 +144,14 @@ export default class MomentUtils implements IUtils { return date.isBefore(value, "day"); }; + public isBeforeMonth = (date: Moment, value: Moment) => { + return date.isBefore(value, "month"); + }; + + public isAfterMonth = (date: Moment, value: Moment) => { + return date.isAfter(value, "month"); + }; + public isBeforeYear = (date: Moment, value: Moment) => { return date.isBefore(value, "year"); };