У меня есть функция, которая возвращает меня только пятницы от диапазона дат
public static List<DateTime> GetDates(DateTime startDate, int weeks)
{
int days = weeks * 7;
//Get the whole date range
List<DateTime> dtFulldateRange = Enumerable.Range(-days, days).Select(i => startDate.AddDays(i)).ToList();
//Get only the fridays from the date range
List<DateTime> dtOnlyFridays = (from dtFridays in dtFulldateRange
where dtFridays.DayOfWeek == DayOfWeek.Friday
select dtFridays).ToList();
return dtOnlyFridays;
}
Цель функции: "Список дат от Недельного числа, указанного до StartDate т.е. Если startdate 23-го апреля 2010 и недельное число, равняется 1, то программа должна возвратить даты с 16-го апреля 2010 до startddate".
Я вызываю функцию как:
DateTime StartDate1 = DateTime.ParseExact("20100430", "yyyyMMdd", System.Globalization.CultureInfo.InvariantCulture);
List<DateTime> dtList = Utility.GetDates(StartDate1, 4).ToList();
Теперь требование изменилось немного. Я должен узнать только прошлые пятницы каждого месяца. Вход к функции останется тем же.
У вас уже есть список пятниц в указанном диапазоне. Теперь просто запросите это еще раз вот так:
List<DateTime> lastFridays = (from day in fridays
where day.AddDays(7).Month != day.Month
select day).ToList<DateTime>();
Надеюсь, это поможет.
Проверить, в какой день недели первый день следующего месяца горит, затем вычтите достаточно дней, чтобы получить пятницу.
Или, если у вас уже есть список пятниц, верните только те, для которых добавление 7 дней дает дату в следующем месяце.