protected override IEnumerable <DateTime> GetNextOccurrencesInternal(DateTime startDate) { var byWeekDays = ByWeekDays?.ToList(); if (IsEmpty(byWeekDays)) { byWeekDays = new List <DayOfWeek> { startDate.DayOfWeek }; } var dayOffsets = byWeekDays.Select(day => (day - WeekStart + 7) % 7).Distinct().OrderBy(a => a).ToList(); var startOfWeek = Extensions.StartOfWeek(startDate, WeekStart); while (true) { var b = true; if (!IsEmpty(ByMonths)) { if (!ByMonths.Contains((Month)startDate.Month)) { b = false; } } if (b) { foreach (var dayOffset in dayOffsets) { var next = startOfWeek.AddDays(dayOffset); if (next >= startDate) { yield return(next); } } } startOfWeek = startOfWeek.AddDays(7 * Interval); } }
protected override IEnumerable <DateTime> GetNextOccurrencesInternal(DateTime startDate) { while (true) { var b = true; if (!IsEmpty(ByMonths)) { if (!ByMonths.Contains((Month)startDate.Month)) { b = false; } } if (!IsEmpty(ByMonthDays)) { if (!ByMonthDays.Contains(startDate.Day)) { b = false; } } if (!IsEmpty(ByWeekDays)) { if (!ByWeekDays.Contains(startDate.DayOfWeek)) { b = false; } } if (b) { yield return(startDate); } startDate = startDate.AddDays(Interval); } // ReSharper disable once FunctionNeverReturns (UNTIL & COUNT are handled by GetNextOccurrences) }
protected override IEnumerable <DateTime> GetNextOccurrencesInternal(DateTime startDate) { if (IsEmpty(ByWeekDays)) { ByWeekDays = new List <DayOfWeek> { startDate.DayOfWeek }; } var dayOffsets = ByWeekDays.Select(day => ((day - WeekStart) + 7) % 7).Distinct().OrderBy(a => a).ToList(); var startOfWeek = startDate.StartOfWeek(WeekStart); while (true) { var b = true; if (!IsEmpty(ByMonths)) { if (!ByMonths.Contains((Month)startDate.Month)) { b = false; } } if (b) { foreach (var dayOffset in dayOffsets) { var next = startOfWeek.AddDays(dayOffset); if (next >= startDate) { yield return(next); } } } startOfWeek = startOfWeek.AddDays(7 * Interval); } // ReSharper disable once FunctionNeverReturns (UNTIL & COUNT are handled by GetNextOccurrences) }