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);
            }
        }
Exemple #2
0
        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)
        }