From ad2c654a6a97ebc93961e860760ea1d956fc7cba Mon Sep 17 00:00:00 2001 From: Sasha Koss Date: Sat, 20 Jan 2024 08:59:20 +0800 Subject: [PATCH] Fix bug in getOverlappingDaysInIntervals Fixed bug in `getOverlappingDaysInIntervals` caused by incorrect sorting of interval components that led to 0 for timestamps of different lengths. --- src/getOverlappingDaysInIntervals/index.ts | 4 ++-- src/getOverlappingDaysInIntervals/test.ts | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/getOverlappingDaysInIntervals/index.ts b/src/getOverlappingDaysInIntervals/index.ts index ab50ef14e5..22e3ceccc6 100644 --- a/src/getOverlappingDaysInIntervals/index.ts +++ b/src/getOverlappingDaysInIntervals/index.ts @@ -41,11 +41,11 @@ export function getOverlappingDaysInIntervals( const [leftStartTime, leftEndTime] = [ +toDate(intervalLeft.start), +toDate(intervalLeft.end), - ].sort(); + ].sort((a, b) => a - b); const [rightStartTime, rightEndTime] = [ +toDate(intervalRight.start), +toDate(intervalRight.end), - ].sort(); + ].sort((a, b) => a - b); const isOverlapping = leftStartTime < rightEndTime && rightStartTime < leftEndTime; diff --git a/src/getOverlappingDaysInIntervals/test.ts b/src/getOverlappingDaysInIntervals/test.ts index 21201fde08..1dad0b91ba 100644 --- a/src/getOverlappingDaysInIntervals/test.ts +++ b/src/getOverlappingDaysInIntervals/test.ts @@ -1,7 +1,7 @@ /* eslint-env mocha */ import assert from "assert"; -import { describe, it } from "vitest"; +import { describe, expect, it } from "vitest"; import { getOverlappingDaysInIntervals } from "./index.js"; describe("getOverlappingDaysInIntervals", () => { @@ -214,4 +214,18 @@ describe("getOverlappingDaysInIntervals", () => { assert(numOverlappingDays === 0); }); }); + + it("properly sorts the dates", () => { + const result = getOverlappingDaysInIntervals( + { + start: new Date(2001, 8 /* Sep */, 1), + end: new Date(2023, 11 /* Dec */, 20), + }, + { + start: new Date(2023, 11 /* Dec */, 21), + end: new Date(2001, 8 /* Sep */, 9), + }, + ); + expect(result).toBe(8137); + }); });