DateRangeEvaluator validator = new(new(2024, 12, 1), new(2025, 2, 1));
DateOnly startDate = new(1900, 10, 1);
foreach (var date in Enumerable.Range(0, 6).Select(startDate.AddMonths))
bool isInBetween = validator.IsBetween(date);
Console.WriteLine($"Date: {date} between {validator.MinDate} and {validator.MaxDate}: {isInBetween}");
public class DateRangeEvaluator
public DateRangeEvaluator(DateOnly minDate, DateOnly maxDate)
if (minDate > maxDate) throw new ArgumentException("MinDate must not be greater than MaxDate");
public DateOnly MinDate { get; }
public DateOnly MaxDate { get; }
public bool IsBetween(DateOnly checkDate)
if (MinDate.Year != MaxDate.Year)
bool checkMaxDate = checkDate.Month < MinDate.Month;
int newCheckDateYear = checkMaxDate ? MaxDate.Year : MinDate.Year;
checkDate = new(newCheckDateYear, checkDate.Month, checkDate.Day);
return checkMaxDate ? checkDate <= MaxDate : checkDate >= MinDate;
DateOnly compareDateMin = new(checkDate.Year, MinDate.Month, MinDate.Day);
DateOnly compareDateMax = new(checkDate.Year, MaxDate.Month, MaxDate.Day);
return checkDate >= compareDateMin && checkDate <= compareDateMax;