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