Skip to content

Fix the issue of incorrect time range calculation across days #718

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

haoyang1994
Copy link
Contributor

@haoyang1994 haoyang1994 commented Jun 9, 2025

The current IsInRange() method produces incorrect results when the time range crosses midnight (StartTime > EndTime) and "Weekdays" is configured. For example, when Weekdays=[Sunday, Monday, Tuesday, Wednesday, Thursday], the system will incorrectly identify Friday's time period as not belonging to the time period.

Reproduce

Config:

		Weekdays:  []string{"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday"},
		StartTime: "19:00:00",
		EndTime:   "06:00:00",
		Timezone:  "America/New_York",

IsInRange() result before change:

[Sunday]2025-06-08 00:00:00 = true
[Sunday]2025-06-08 01:00:00 = true
[Sunday]2025-06-08 02:00:00 = true
[Sunday]2025-06-08 03:00:00 = true
[Sunday]2025-06-08 04:00:00 = true
[Sunday]2025-06-08 05:00:00 = true
[Sunday]2025-06-08 06:00:00 = true
[Sunday]2025-06-08 07:00:00 = false
[Sunday]2025-06-08 08:00:00 = false
[Sunday]2025-06-08 09:00:00 = false
[Sunday]2025-06-08 10:00:00 = false
[Sunday]2025-06-08 11:00:00 = false
[Sunday]2025-06-08 12:00:00 = false
[Sunday]2025-06-08 13:00:00 = false
[Sunday]2025-06-08 14:00:00 = false
[Sunday]2025-06-08 15:00:00 = false
[Sunday]2025-06-08 16:00:00 = false
[Sunday]2025-06-08 17:00:00 = false
[Sunday]2025-06-08 18:00:00 = false
[Sunday]2025-06-08 19:00:00 = true
[Sunday]2025-06-08 20:00:00 = true
[Sunday]2025-06-08 21:00:00 = true
[Sunday]2025-06-08 22:00:00 = true
[Sunday]2025-06-08 23:00:00 = true
[Monday]2025-06-09 00:00:00 = true
[Monday]2025-06-09 01:00:00 = true
[Monday]2025-06-09 02:00:00 = true
[Monday]2025-06-09 03:00:00 = true
[Monday]2025-06-09 04:00:00 = true
[Monday]2025-06-09 05:00:00 = true
[Monday]2025-06-09 06:00:00 = true
[Monday]2025-06-09 07:00:00 = false
[Monday]2025-06-09 08:00:00 = false
[Monday]2025-06-09 09:00:00 = false
[Monday]2025-06-09 10:00:00 = false
[Monday]2025-06-09 11:00:00 = false
[Monday]2025-06-09 12:00:00 = false
[Monday]2025-06-09 13:00:00 = false
[Monday]2025-06-09 14:00:00 = false
[Monday]2025-06-09 15:00:00 = false
[Monday]2025-06-09 16:00:00 = false
[Monday]2025-06-09 17:00:00 = false
[Monday]2025-06-09 18:00:00 = false
[Monday]2025-06-09 19:00:00 = true
[Monday]2025-06-09 20:00:00 = true
[Monday]2025-06-09 21:00:00 = true
[Monday]2025-06-09 22:00:00 = true
[Monday]2025-06-09 23:00:00 = true
[Tuesday]2025-06-10 00:00:00 = true
[Tuesday]2025-06-10 01:00:00 = true
[Tuesday]2025-06-10 02:00:00 = true
[Tuesday]2025-06-10 03:00:00 = true
[Tuesday]2025-06-10 04:00:00 = true
[Tuesday]2025-06-10 05:00:00 = true
[Tuesday]2025-06-10 06:00:00 = true
[Tuesday]2025-06-10 07:00:00 = false
[Tuesday]2025-06-10 08:00:00 = false
[Tuesday]2025-06-10 09:00:00 = false
[Tuesday]2025-06-10 10:00:00 = false
[Tuesday]2025-06-10 11:00:00 = false
[Tuesday]2025-06-10 12:00:00 = false
[Tuesday]2025-06-10 13:00:00 = false
[Tuesday]2025-06-10 14:00:00 = false
[Tuesday]2025-06-10 15:00:00 = false
[Tuesday]2025-06-10 16:00:00 = false
[Tuesday]2025-06-10 17:00:00 = false
[Tuesday]2025-06-10 18:00:00 = false
[Tuesday]2025-06-10 19:00:00 = true
[Tuesday]2025-06-10 20:00:00 = true
[Tuesday]2025-06-10 21:00:00 = true
[Tuesday]2025-06-10 22:00:00 = true
[Tuesday]2025-06-10 23:00:00 = true
[Wednesday]2025-06-11 00:00:00 = true
[Wednesday]2025-06-11 01:00:00 = true
[Wednesday]2025-06-11 02:00:00 = true
[Wednesday]2025-06-11 03:00:00 = true
[Wednesday]2025-06-11 04:00:00 = true
[Wednesday]2025-06-11 05:00:00 = true
[Wednesday]2025-06-11 06:00:00 = true
[Wednesday]2025-06-11 07:00:00 = false
[Wednesday]2025-06-11 08:00:00 = false
[Wednesday]2025-06-11 09:00:00 = false
[Wednesday]2025-06-11 10:00:00 = false
[Wednesday]2025-06-11 11:00:00 = false
[Wednesday]2025-06-11 12:00:00 = false
[Wednesday]2025-06-11 13:00:00 = false
[Wednesday]2025-06-11 14:00:00 = false
[Wednesday]2025-06-11 15:00:00 = false
[Wednesday]2025-06-11 16:00:00 = false
[Wednesday]2025-06-11 17:00:00 = false
[Wednesday]2025-06-11 18:00:00 = false
[Wednesday]2025-06-11 19:00:00 = true
[Wednesday]2025-06-11 20:00:00 = true
[Wednesday]2025-06-11 21:00:00 = true
[Wednesday]2025-06-11 22:00:00 = true
[Wednesday]2025-06-11 23:00:00 = true
[Thursday]2025-06-12 00:00:00 = true
[Thursday]2025-06-12 01:00:00 = true
[Thursday]2025-06-12 02:00:00 = true
[Thursday]2025-06-12 03:00:00 = true
[Thursday]2025-06-12 04:00:00 = true
[Thursday]2025-06-12 05:00:00 = true
[Thursday]2025-06-12 06:00:00 = true
[Thursday]2025-06-12 07:00:00 = false
[Thursday]2025-06-12 08:00:00 = false
[Thursday]2025-06-12 09:00:00 = false
[Thursday]2025-06-12 10:00:00 = false
[Thursday]2025-06-12 11:00:00 = false
[Thursday]2025-06-12 12:00:00 = false
[Thursday]2025-06-12 13:00:00 = false
[Thursday]2025-06-12 14:00:00 = false
[Thursday]2025-06-12 15:00:00 = false
[Thursday]2025-06-12 16:00:00 = false
[Thursday]2025-06-12 17:00:00 = false
[Thursday]2025-06-12 18:00:00 = false
[Thursday]2025-06-12 19:00:00 = true
[Thursday]2025-06-12 20:00:00 = true
[Thursday]2025-06-12 21:00:00 = true
[Thursday]2025-06-12 22:00:00 = true
[Thursday]2025-06-12 23:00:00 = true
[Friday]2025-06-13 00:00:00 = false
[Friday]2025-06-13 01:00:00 = false
[Friday]2025-06-13 02:00:00 = false
[Friday]2025-06-13 03:00:00 = false
[Friday]2025-06-13 04:00:00 = false
[Friday]2025-06-13 05:00:00 = false
[Friday]2025-06-13 06:00:00 = false
[Friday]2025-06-13 07:00:00 = false
[Friday]2025-06-13 08:00:00 = false
[Friday]2025-06-13 09:00:00 = false
[Friday]2025-06-13 10:00:00 = false
[Friday]2025-06-13 11:00:00 = false
[Friday]2025-06-13 12:00:00 = false
[Friday]2025-06-13 13:00:00 = false
[Friday]2025-06-13 14:00:00 = false
[Friday]2025-06-13 15:00:00 = false
[Friday]2025-06-13 16:00:00 = false
[Friday]2025-06-13 17:00:00 = false
[Friday]2025-06-13 18:00:00 = false
[Friday]2025-06-13 19:00:00 = false
[Friday]2025-06-13 20:00:00 = false
[Friday]2025-06-13 21:00:00 = false
[Friday]2025-06-13 22:00:00 = false
[Friday]2025-06-13 23:00:00 = false

IsInRange() result after change:

[Sunday]2025-06-08 00:00:00 = false
[Sunday]2025-06-08 01:00:00 = false
[Sunday]2025-06-08 02:00:00 = false
[Sunday]2025-06-08 03:00:00 = false
[Sunday]2025-06-08 04:00:00 = false
[Sunday]2025-06-08 05:00:00 = false
[Sunday]2025-06-08 06:00:00 = false
[Sunday]2025-06-08 07:00:00 = false
[Sunday]2025-06-08 08:00:00 = false
[Sunday]2025-06-08 09:00:00 = false
[Sunday]2025-06-08 10:00:00 = false
[Sunday]2025-06-08 11:00:00 = false
[Sunday]2025-06-08 12:00:00 = false
[Sunday]2025-06-08 13:00:00 = false
[Sunday]2025-06-08 14:00:00 = false
[Sunday]2025-06-08 15:00:00 = false
[Sunday]2025-06-08 16:00:00 = false
[Sunday]2025-06-08 17:00:00 = false
[Sunday]2025-06-08 18:00:00 = false
[Sunday]2025-06-08 19:00:00 = true
[Sunday]2025-06-08 20:00:00 = true
[Sunday]2025-06-08 21:00:00 = true
[Sunday]2025-06-08 22:00:00 = true
[Sunday]2025-06-08 23:00:00 = true
[Monday]2025-06-09 00:00:00 = true
[Monday]2025-06-09 01:00:00 = true
[Monday]2025-06-09 02:00:00 = true
[Monday]2025-06-09 03:00:00 = true
[Monday]2025-06-09 04:00:00 = true
[Monday]2025-06-09 05:00:00 = true
[Monday]2025-06-09 06:00:00 = true
[Monday]2025-06-09 07:00:00 = false
[Monday]2025-06-09 08:00:00 = false
[Monday]2025-06-09 09:00:00 = false
[Monday]2025-06-09 10:00:00 = false
[Monday]2025-06-09 11:00:00 = false
[Monday]2025-06-09 12:00:00 = false
[Monday]2025-06-09 13:00:00 = false
[Monday]2025-06-09 14:00:00 = false
[Monday]2025-06-09 15:00:00 = false
[Monday]2025-06-09 16:00:00 = false
[Monday]2025-06-09 17:00:00 = false
[Monday]2025-06-09 18:00:00 = false
[Monday]2025-06-09 19:00:00 = true
[Monday]2025-06-09 20:00:00 = true
[Monday]2025-06-09 21:00:00 = true
[Monday]2025-06-09 22:00:00 = true
[Monday]2025-06-09 23:00:00 = true
[Tuesday]2025-06-10 00:00:00 = true
[Tuesday]2025-06-10 01:00:00 = true
[Tuesday]2025-06-10 02:00:00 = true
[Tuesday]2025-06-10 03:00:00 = true
[Tuesday]2025-06-10 04:00:00 = true
[Tuesday]2025-06-10 05:00:00 = true
[Tuesday]2025-06-10 06:00:00 = true
[Tuesday]2025-06-10 07:00:00 = false
[Tuesday]2025-06-10 08:00:00 = false
[Tuesday]2025-06-10 09:00:00 = false
[Tuesday]2025-06-10 10:00:00 = false
[Tuesday]2025-06-10 11:00:00 = false
[Tuesday]2025-06-10 12:00:00 = false
[Tuesday]2025-06-10 13:00:00 = false
[Tuesday]2025-06-10 14:00:00 = false
[Tuesday]2025-06-10 15:00:00 = false
[Tuesday]2025-06-10 16:00:00 = false
[Tuesday]2025-06-10 17:00:00 = false
[Tuesday]2025-06-10 18:00:00 = false
[Tuesday]2025-06-10 19:00:00 = true
[Tuesday]2025-06-10 20:00:00 = true
[Tuesday]2025-06-10 21:00:00 = true
[Tuesday]2025-06-10 22:00:00 = true
[Tuesday]2025-06-10 23:00:00 = true
[Wednesday]2025-06-11 00:00:00 = true
[Wednesday]2025-06-11 01:00:00 = true
[Wednesday]2025-06-11 02:00:00 = true
[Wednesday]2025-06-11 03:00:00 = true
[Wednesday]2025-06-11 04:00:00 = true
[Wednesday]2025-06-11 05:00:00 = true
[Wednesday]2025-06-11 06:00:00 = true
[Wednesday]2025-06-11 07:00:00 = false
[Wednesday]2025-06-11 08:00:00 = false
[Wednesday]2025-06-11 09:00:00 = false
[Wednesday]2025-06-11 10:00:00 = false
[Wednesday]2025-06-11 11:00:00 = false
[Wednesday]2025-06-11 12:00:00 = false
[Wednesday]2025-06-11 13:00:00 = false
[Wednesday]2025-06-11 14:00:00 = false
[Wednesday]2025-06-11 15:00:00 = false
[Wednesday]2025-06-11 16:00:00 = false
[Wednesday]2025-06-11 17:00:00 = false
[Wednesday]2025-06-11 18:00:00 = false
[Wednesday]2025-06-11 19:00:00 = true
[Wednesday]2025-06-11 20:00:00 = true
[Wednesday]2025-06-11 21:00:00 = true
[Wednesday]2025-06-11 22:00:00 = true
[Wednesday]2025-06-11 23:00:00 = true
[Thursday]2025-06-12 00:00:00 = true
[Thursday]2025-06-12 01:00:00 = true
[Thursday]2025-06-12 02:00:00 = true
[Thursday]2025-06-12 03:00:00 = true
[Thursday]2025-06-12 04:00:00 = true
[Thursday]2025-06-12 05:00:00 = true
[Thursday]2025-06-12 06:00:00 = true
[Thursday]2025-06-12 07:00:00 = false
[Thursday]2025-06-12 08:00:00 = false
[Thursday]2025-06-12 09:00:00 = false
[Thursday]2025-06-12 10:00:00 = false
[Thursday]2025-06-12 11:00:00 = false
[Thursday]2025-06-12 12:00:00 = false
[Thursday]2025-06-12 13:00:00 = false
[Thursday]2025-06-12 14:00:00 = false
[Thursday]2025-06-12 15:00:00 = false
[Thursday]2025-06-12 16:00:00 = false
[Thursday]2025-06-12 17:00:00 = false
[Thursday]2025-06-12 18:00:00 = false
[Thursday]2025-06-12 19:00:00 = true
[Thursday]2025-06-12 20:00:00 = true
[Thursday]2025-06-12 21:00:00 = true
[Thursday]2025-06-12 22:00:00 = true
[Thursday]2025-06-12 23:00:00 = true
[Friday]2025-06-13 00:00:00 = true
[Friday]2025-06-13 01:00:00 = true
[Friday]2025-06-13 02:00:00 = true
[Friday]2025-06-13 03:00:00 = true
[Friday]2025-06-13 04:00:00 = true
[Friday]2025-06-13 05:00:00 = true
[Friday]2025-06-13 06:00:00 = true
[Friday]2025-06-13 07:00:00 = false
[Friday]2025-06-13 08:00:00 = false
[Friday]2025-06-13 09:00:00 = false
[Friday]2025-06-13 10:00:00 = false
[Friday]2025-06-13 11:00:00 = false
[Friday]2025-06-13 12:00:00 = false
[Friday]2025-06-13 13:00:00 = false
[Friday]2025-06-13 14:00:00 = false
[Friday]2025-06-13 15:00:00 = false
[Friday]2025-06-13 16:00:00 = false
[Friday]2025-06-13 17:00:00 = false
[Friday]2025-06-13 18:00:00 = false
[Friday]2025-06-13 19:00:00 = false
[Friday]2025-06-13 20:00:00 = false
[Friday]2025-06-13 21:00:00 = false
[Friday]2025-06-13 22:00:00 = false
[Friday]2025-06-13 23:00:00 = false

@geritol
Copy link

geritol commented Jul 17, 2025

Also encountered this: Sunday (13th) 2AM is not expected to be in range for the below config (expected to be down from Friday 3 AM till Sunday 6PM)

edit: or expected to be down from Saturday 3 AM till Sunday 6PM?

Subject: [PATCH] add failing test
---
Index: internal/time_range_test.go
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
diff --git a/internal/time_range_test.go b/internal/time_range_test.go
--- a/internal/time_range_test.go	(revision 90fde31c50e9f39850fa8b7843fe6f749469602e)
+++ b/internal/time_range_test.go	(date 1752765476696)
@@ -111,6 +111,15 @@
 		expectedInRange bool
 	}{
 		{
+			label:           "2AM, inverted start/end, weekdays in range",
+			start:           NewTimeOfDay(18, 0, 0),
+			end:             NewTimeOfDay(3, 0, 0),
+			weekdays:        []time.Weekday{time.Monday, time.Tuesday, time.Wednesday, time.Thursday, time.Friday, time.Sunday},
+			location:        time.UTC,
+			now:             time.Date(2025, time.July, 13, 2, 0, 0, 0, time.UTC),
+			expectedInRange: false,
+		},
+		{
 			label:           "10AM",
 			start:           NewTimeOfDay(3, 0, 0),
 			end:             NewTimeOfDay(18, 0, 0),

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants