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