public static IEnumerable<int> GetMatchedDays(DateTime startDate, DayOfWeekOrdinal dayOfWeekOrdinal, DayOfWeek dayOfWeek) { int ordinal = 0; DateTime currentDate = new DateTime(startDate.Year, startDate.Month, dayOfWeekOrdinal == DayOfWeekOrdinal.Last ? DateTime.DaysInMonth(startDate.Year, startDate.Month) : 1); while (currentDate.Month == startDate.Month) { if (IsDayOfWeekMatched(new[] { dayOfWeek }, currentDate)) { if (dayOfWeekOrdinal == DayOfWeekOrdinal.Last) { if (currentDate.Day >= startDate.Day) { yield return currentDate.Day; } break; } ordinal++; if (ordinal == (int)dayOfWeekOrdinal || dayOfWeekOrdinal == DayOfWeekOrdinal.None) { if (currentDate.Day >= startDate.Day) { yield return currentDate.Day; } break; } } currentDate = currentDate.AddDays(dayOfWeekOrdinal == DayOfWeekOrdinal.Last ? -1 : 1); } }
public static IEnumerable <int> GetMatchedDays(DateTime startDate, DayOfWeekOrdinal dayOfWeekOrdinal, DayOfWeek dayOfWeek) { int ordinal = 0; DateTime currentDate = new DateTime(startDate.Year, startDate.Month, dayOfWeekOrdinal == DayOfWeekOrdinal.Last ? DateTime.DaysInMonth(startDate.Year, startDate.Month) : 1); while (currentDate.Month == startDate.Month) { if (IsDayOfWeekMatched(new[] { dayOfWeek }, currentDate)) { if (dayOfWeekOrdinal == DayOfWeekOrdinal.Last) { if (currentDate.Day >= startDate.Day) { yield return(currentDate.Day); } break; } ordinal++; if (ordinal == (int)dayOfWeekOrdinal || dayOfWeekOrdinal == DayOfWeekOrdinal.None) { if (currentDate.Day >= startDate.Day) { yield return(currentDate.Day); } break; } } currentDate = currentDate.AddDays(dayOfWeekOrdinal == DayOfWeekOrdinal.Last ? -1 : 1); } }