根据按月筛选的两个日期值获取数据

时间:2015-08-12 04:50:55

标签: c# asp.net

我有活动清单,每个活动有两个日期;开始日期和结束日期。我想按月创建一个过滤器。如何返回用户选择的月份范围之间的日期? 例如,假设用户选择月份10月,我想返回本月内的所有事件。

我已经用它来获取今天日期之间的日期,但现在却停留在如何获得一个月之间的范围。

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

2 个答案:

答案 0 :(得分: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);

编辑:如果您需要确保日期也是正确的年份,请使用

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

答案 1 :(得分:0)

您仍然可以使用您的代码进行少量修改。作为开始日期,您必须选择当月1日00:00时间作为结束日期,您必须使用下个月1日00:00时间。如果是2015年10月,那将是: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());
    } 
}