using System.Collections.Generic;
public static void Main()
ListTimespans(new DateTime(2020, 1, 1), new DateTime(2020, 01, 31), 7, 10).Dump();
public static IEnumerable<(DateTime start, DateTime end)> ListTimespans(DateTime startDate, DateTime endDate, int minDays, int maxDays)
for (var start = startDate; start <= endDate.AddDays(-minDays); start = start.AddDays(1))
for (var end = start.AddDays(minDays); end <= Min(start.AddDays(maxDays), endDate); end = end.AddDays(1))
yield return (start, end);
DateTime Min(DateTime x, DateTime y) => x < y ? x : y;