如何在Asp.Net中获取两个日期之间的范围..?

时间:2013-09-17 16:18:34

标签: c# asp.net sql date

我在TextBox中有两个DatePicker。我想打印textBox范围之间的所有日期。如何在数据库中插入这些多个日期......?

示例:

在First TextBox中: - 2013年7月1日

第二个TextBox: - 2013年12月31日

输出应该是:

2013年7月1日

2013年7月2日

2013年7月3日

2013年7月4日

|

|

|

2013年12月30日

2013年12月31日

6 个答案:

答案 0 :(得分:4)

 private List<DateTime> GetRange()
 {
    var res = new List<DateTime>();
    var start = DateTime.Parse(textBox1.Text);
    var end = DateTime.Parse(textBox2.Text);
    for (var date = start; date <= end; date = date.AddDays(1))
         res.Add(date);

    return res;
 }

答案 1 :(得分:2)

首先,将两个输入转换为日期对象。您可以使用DateTime.Parse()

DateTime start = DateTime.Parse("1 July 2013");
DateTime end = DateTime.Parse("31 December 2013");

然后简单地循环到最后。

while(start <= end)
{
   // Output or save to DB etc
   Console.WriteLine(start.ToString("d MMMMM yyyy"));
   start = start.AddDays(1);
}

答案 2 :(得分:0)

你为什么要这样做?

您当然可以这样做,具体取决于db中varchar(max)字段的粒度,并将字符串设置为:

string result = "";
for(int x = 0; x< (endDate - startDate).TotalDays; x++) 
{
   result += startDate.AddDays(x).ToDateString();
}

我无法理解为什么你会想要这个。存储开始日期和结束日期,然后在应用程序中使用逻辑来计算信息,并在需要时看起来更有意义。

答案 3 :(得分:0)

List<DateTime> allDates = new List<DateTime>();

    int starting = startingDate.Day;
int ending = endingDate.Day;

for (int i = starting; i <= ending; i++)
{
    allDates.Add(new DateTime(startingDate.Year, startingDate.Month, i));
}

答案 4 :(得分:0)

使用Linq:

var date1 = DateTime.Now.AddMonths(-1);
var date2 = DateTime.Now;

var dates = Enumerable
    .Range(1, (int)(date2 - date1).TotalDays)
    .Select(d => date1.AddDays(d).Date);

将结果转储到字符串:

var output = string.Join(Environment.NewLine, dates);

答案 5 :(得分:0)

感谢您的响应每个人.....

但对我来说完美答案是以上所有答案的组合...

DateTime dt = Convert.ToDateTime(TextBox1.Text);

        string result = "";

       for (int x = 0; x <= (Convert.ToDateTime(TextBox2.Text) - Convert.ToDateTime(TextBox1.Text)).TotalDays; x++)

        {

            result = dt.AddDays(x).ToString("d MMMMM yyyy");

            Response.Write("<br>" + result);

        }