获取DateA和DateB之间所有日期的最佳方法

时间:2020-03-06 15:02:10  来源:igfitidea点击:

我正在使用asp:Calander,并且我有一个具有开始日期和结束日期的对象。我需要获取这两个日期之间的所有日期,并将它们放置在数组中,以便随后可以使用不同的CSS在日历上绘制相应的日期

解决方案

DateTime startDate;
DateTime endDate;

DateTime currentDate = startDate;
List<DateTime> dates = new List<DateTime> ();

while (true)
{
    dates.Add (currentDate);
    if (currentDate.Equals (endDate)) break;
    currentDate = currentDate.AddDays (1);
}

假定startDate <而不是endDate,我们将在"日期"列表上获得结果

我投票支持AlbertEin,因为他给出了一个很好的答案,但是我们真的需要一个收藏集来保存所有日期吗?渲染日期时,是否只能检查日期是否在指定范围内,然后以不同的方式渲染,而无需收集。这是一些代码来演示

DateTime RangeStartDate,RangeEndDate; //Init as necessary
DateTime CalendarStartDate,CalendarEndDate; //Init as necessary
DateTime CurrentDate = CalendarStartDate;

String CSSClass;

while (CurrentDate != CalendarEndDate)
{
    if(CurrentDate >= RangeStartDate && CurrentDate <= RangeEndDate)
    {
        CSSClass= "InRange";
    }     
    else
    {
        CSSClass = "OutOfRange";
    }
    //Code For rendering calendar goes here
    currentDate = currentDate.AddDays (1);
}

IEnumerable<DateTime> RangeDays(DateTime RangeStart, DateTime RangeEnd) {
   DateTime EndDate = RangeEnd.Date;

   for (DateTime WorkDate = RangeStart.Date; WorkDate <= EndDate; WorkDate = WorkDate.AddDays(1)) {
      yield return WorkDate;
   }

   yield break;
}

未经测试的代码...但应该可以。

// inclusive
var allDates = Enumerable.Range(0, (endDate - startDate).Days + 1).Select(i => startDate.AddDays(i));

// exclusive
var allDates = Enumerable.Range(1, (endDate - startDate).Days).Select(i => startDate.AddDays(i));