2015-08-12 4 views
5

У меня есть список событий, каждое событие имеет две даты; дата начала и дата окончания. Я хочу создать фильтр по месяцам. Как вернуть даты, которые варьируются между месяцем, который выбирает пользователь? , например, позволяет сказать, что пользователь выбирает месяц октября, я хочу вернуть все события, которые находятся в этом месяце.Получить данные на основе двух значений дат, отфильтрованных по месяцам

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

DateTime dateToCheck = DateTime.Today.Date; 
DateTime startDate = DateTime.Parse(item["Start Time"].ToString()); 
DateTime endDate = DateTime.Parse(item["End Time"].ToString()); 
foreach (SPListItem item in collection) 
{ 
    if (startDate <= dateToCheck && dateToCheck < endDate) 
    { 
     ListBox1.Items.Add(item["EventTitle"].ToString()); 
    } 
} 
+1

Пожалуйста, добавьте больше информации, вы что-то пробовали? Его сложно сформулировать ответ только из текста. – Joseph

ответ

3
// set up dummy data 
var dates = new[] {DateTime.Now, DateTime.Now, DateTime.Now}; 
int month = GetMonth(); 
// get result 
var result = dates.Where(date => date.Month == month); 

EDIT: если вам нужно, чтобы убедиться, что даты есть правильный год, а также, использовать

var dates = new[] {DateTime.Now, DateTime.Now, DateTime.Now}; 
int year = GetYear(); 
int month = GetMonth(); 
var result = dates.Where(date => date.Year == year && date.Month == month); 

Конечно, вы можете получить год/месяц число, а также дата-лист из любого места.

EDIT2: если вы получаете объект DateTime в качестве входного изменения соответственно:

var dates = new[] {DateTime.Now, DateTime.Now, DateTime.Now}; 
var input = GetDateTime(); 
var result = dates.Where(date => date.Year == input.Year && date.Month == input.Month); 
0

Вы можете использовать свой код с небольшими изменениями. В качестве даты начала вы должны выбрать 00:00 время 1-го числа месяца, а в качестве даты окончания вы должны использовать 00:00 1-го числа следующего месяца. В случае октября 2015 года это будет: 1 Oct 2015 <= date < 1 Nov 2015.

int year = 2015; 
int month = 10; 
DateTime dateToCheck = DateTime.Today.Date; 
DateTime startDate = new DateTime(year, month, 1); 
DateTime endDate = startDate.AddMonths(1); 
foreach (SPListItem item in collection) 
{ 
    if (startDate <= dateToCheck && dateToCheck < endDate) 
    { 
     ListBox1.Items.Add(item["EventTitle"].ToString()); 
    } 
} 
Смежные вопросы