Это очень простой алгоритм:
public static List<DateTime> GetDayOccurrences(DayOfWeek day, DateTime from, DateTime to)
{
var results = new List<DateTime>();
while (from <= to)
{
if (from.DayOfWeek == day)
{
results.Add(from);
from = from.AddDays(7);
}
else
{
from = from.AddDays(1);
}
}
return results;
}
Чтобы сделать это немного быстрее я двигаюсь 7 дней вперед, если текущая дата выбран день недели.
И использование этого метода:
var from = new DateTime(2013, 3, 1);
var to = new DateTime(2013, 4, 30);
List<DateTime> mondays = GetDayOccurrences(DayOfWeek.Monday, from, to);
Btw: есть 9 понедельникам между 01/03/2013 и 30/04/2013:
2013-03-04
2013-03-11
2013-03-18
2013-03-25
2013-04-01
2013-04-08
2013-04-15
2013-04-22
2013-04-29
ОБНОВЛЕНИЕ
Это также можно сделать так, чтобы удалить if
инструкций в цикле:
public static List<DateTime> GetDayOccurrences(DayOfWeek day, DateTime from, DateTime to)
{
var results = new List<DateTime>();
while(from <= to && from.DayOfWeek != day)
from = from.AddDays(1);
while (from <= to)
{
results.Add(from);
from = from.AddDays(7);
}
return results;
}
давайте посмотрим на попытку ... –
@JW. Я использую MS SQL Server 2008 – Arbaaz
@MitchWheat Я даже не знаю с чего начать. Я добавил элемент управления календарем, но это дало бы мне только одну дату. Я новичок, поэтому плз медведь со мной. – Arbaaz