diff --git a/packages/lib/date-ranges.test.ts b/packages/lib/date-ranges.test.ts index 4a3769b378..c851c6c43d 100644 --- a/packages/lib/date-ranges.test.ts +++ b/packages/lib/date-ranges.test.ts @@ -179,6 +179,38 @@ describe("processWorkingHours", () => { expect(allDSTStartAt12).toBeTruthy(); expect(allNotDSTStartAt13).toBeTruthy(); }); + + it("should skip event if it ends before it starts (different days)", () => { + const item = { + days: [1, 2, 3], + startTime: new Date(new Date().setUTCHours(8, 0, 0, 0)), // 8 AM + endTime: new Date(new Date().setUTCHours(7, 0, 0, 0)), // 7 AM + }; + + const timeZone = "America/New_York"; + const dateFrom = dayjs("2023-11-07T00:00:00Z").tz(timeZone); // 2023-11-07T00:00:00 (America/New_York) + const dateTo = dayjs("2023-11-08T00:00:00Z").tz(timeZone); // 2023-11-08T00:00:00 (America/New_York) + + const results = processWorkingHours({ item, timeZone, dateFrom, dateTo }); + + expect(results).toEqual([]); + }); + + it("should skip event if it ends before it starts (same day but different hours)", () => { + const item = { + days: [1], + startTime: new Date(new Date().setUTCHours(8, 0, 0, 0)), // 8 AM + endTime: new Date(new Date().setUTCHours(7, 0, 0, 0)), // 7 AM + }; + + const timeZone = "America/New_York"; + const dateFrom = dayjs("2023-11-07T00:00:00Z").tz(timeZone); // 2023-11-07T00:00:00 (America/New_York) + const dateTo = dayjs("2023-11-07T23:59:59Z").tz(timeZone); // 2023-11-07T23:59:59 (America/New_York) + + const results = processWorkingHours({ item, timeZone, dateFrom, dateTo }); + + expect(results).toEqual([]); + }); }); describe("processDateOverrides", () => { diff --git a/packages/lib/date-ranges.ts b/packages/lib/date-ranges.ts index fcef54a649..71e1ab3cbe 100644 --- a/packages/lib/date-ranges.ts +++ b/packages/lib/date-ranges.ts @@ -47,7 +47,11 @@ export function processWorkingHours({ const startResult = dayjs.max(start, dateFrom.tz(timeZone)); const endResult = dayjs.min(end, dateTo.tz(timeZone)); - if (startResult.isAfter(endResult)) { + const isLater = + startResult.isAfter(endResult, "hour") || + (startResult.isSame(endResult, "hour") && startResult.isAfter(endResult, "minute")); + + if (isLater) { // if an event ends before start, it's not a result. continue; }