2013-03-02 2 views
-1

Я хочу выбрать день, скажем, в понедельник. Теперь я хочу получить даты всех понедельников, которые выпадают в этом месяце или между двумя выбранными датами (даже лучше). Например.Как получить даты выбранного дня на целый месяц?

День выбран: Понедельник

Дата начала: 1 марта

Дата окончания: 30 апреля

Это должно заставить меня даты всех 8 понедельников, которые попадают между этими двумя датами , Я готов использовать DropDownList или календарь или все, что необходимо для этого. Я работаю с C#, Visual Studio 2010.

+1

давайте посмотрим на попытку ... –

+0

@JW. Я использую MS SQL Server 2008 – Arbaaz

+0

@MitchWheat Я даже не знаю с чего начать. Я добавил элемент управления календарем, но это дало бы мне только одну дату. Я новичок, поэтому плз медведь со мной. – Arbaaz

ответ

0

Попробуйте

DateTime d1 = DateTime.Parse("03/01/2013"); 
DateTime d2 = DateTime.Parse("04/01/2013"); 

int days = (d2 - d1).TotalDays; 

for (i = 0; i <= days; i++) { 
    DateTime d = d1.AddDays(i); 
    if ((d.DayOfWeek == DayOfWeek.Monday)) { 
     Console.WriteLine(d); //dateList.Add(d); <------ this could be a List<DateTime> or List<string> 
    } 
} 

Output - M/dd/yyyy format 
------- 
3/04/2013 
3/11/2013 
3/18/2013 
3/25/2013 
4/01/2013 
+0

Я работаю с webforms. Однако ваш код работает. Btw, что я должен использовать для хранения выходных дат? ArrayList? Что ты предлагаешь? – Arbaaz

+0

Также я не хочу делать ЧЕРКОДИЮ ПОНЕДЕЛЬНИКА. Пользователь должен иметь возможность самостоятельно выбирать день. – Arbaaz

+0

Вы можете добавить его в список, например. 'ArrayList, List , List ' и т. Д. Вместо 'Console.WriteLine' и привязать его к' DropdownList'. Я думаю, вы должны быть в состоянии выяснить остальные – codingbiz

0

Это очень простой алгоритм:

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; 
    } 
+0

Я не просто хочу, чтобы подсчет я тоже хочу хранить даты. Все 9 из них. Также пользователь должен иметь возможность самостоятельно выбирать день. – Arbaaz

+0

Этот метод возвращает 'List ' со всеми датами! – MarcinJuraszek

Смежные вопросы