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

