using System.Collections.Generic;
static bool IsBetween(DateTime toCheck, DateTime min, DateTime max)
string d = toCheck.ToString("MMdd");
string x = min.ToString("MMdd");
string y = max.ToString("MMdd");
return string.Compare(x, y) <= 0
? string.Compare(d, x) >= 0 && string.Compare(d, y) <= 0
: string.Compare(d, x) >= 0 || string.Compare(d, y) <= 0;
public static void Main()
List<(DateTime min, DateTime max, DateTime toCheck)> tests = new()
(new DateTime(2024, 2, 1), new DateTime(2024, 7, 31), new DateTime(1900, 1, 31)),
(new DateTime(2024, 2, 1), new DateTime(2024, 7, 31), new DateTime(1900, 2, 1)),
(new DateTime(2024, 2, 1), new DateTime(2024, 7, 31), new DateTime(1900, 7, 31)),
(new DateTime(2024, 2, 1), new DateTime(2024, 7, 31), new DateTime(1900, 8, 1)),
(new DateTime(2024, 8, 1), new DateTime(2025, 1, 31), new DateTime(1900, 7, 31)),
(new DateTime(2024, 8, 1), new DateTime(2025, 1, 31), new DateTime(1900, 8, 1)),
(new DateTime(2024, 8, 1), new DateTime(2025, 1, 31), new DateTime(1900, 1, 31)),
(new DateTime(2024, 8, 1), new DateTime(2025, 1, 31), new DateTime(1900, 2, 1)),
foreach (var test in tests)
"{0:yyyy-MM-dd} is between {1:yyyy-MM-dd} and {2:yyyy-MM-dd} => {3}",
IsBetween(test.toCheck, test.min, test.max)