2015-08-12 11 views
5

Mam listę zdarzeń, każde zdarzenie ma dwie daty; data rozpoczęcia i data zakończenia. Chcę utworzyć filtr przez miesiące. Jak zwracać daty, które mają zakres od miesiąca wybranego przez użytkownika? na przykład, powiedzmy, że użytkownik wybierze miesiąc października, chcę przywrócić wszystkie wydarzenia, które są w tym miesiącu.Pobierz dane na podstawie wartości dwóch dat filtrowanych według miesiąca

Użyłem tego, aby uzyskać daty, które wahają się między dzisiejszą datą, ale teraz utknąłem na tym, jak uzyskać zakres między miesiącem.

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

Proszę dodać więcej informacji, czy próbowałeś czegoś? Trudno sformułować odpowiedź tylko z tekstu. – Joseph

Odpowiedz

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: jeśli trzeba upewnić się, że daty mają prawidłowy rok jak dobrze wykorzystać

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); 

oczywiście, można uzyskać Rok/numery miesiąc, jak również lista dat z dowolnego miejsca.

EDIT2: jeśli masz obiekt DateTime jak wejście zmodyfikować odpowiednio:

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

nadal można używać kodu z małymi modyfikacjami. Jako datę rozpoczęcia musisz wybrać 00:00 czas 1 dnia miesiąca, a jako datę zakończenia musisz użyć czasu 00:00 pierwszego dnia następnego miesiąca. W przypadku października 2015 r. Będzie to: 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()); 
    } 
} 
Powiązane problemy