




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;
}
Непроверенный код ... но должен работать.
Я не знаю о календаре asp.net, но он отлично работает, чтобы получить даты между датой начала и датой, учитывая, что дата окончания всегда больше, чем дата начала.
// 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));
Я знаю, что в VB.NET AddDays возвращает объект даты, который необходимо назначить. Он будет использоваться как "currentDate = currentDate.AddDays (1). Я не уверен, что это то же самое в C#".