2008-10-02 5 views

Répondre

1

J'ai voté AlbertEin parce qu'il a donné une bonne réponse, mais avez-vous vraiment besoin d'une collection pour tenir toutes les dates? Lorsque vous affichez le jour, ne pouvez-vous pas simplement vérifier si la date correspond à la plage spécifiée, puis la restituer différemment, sans avoir besoin d'une collection. Voici un code pour démontrer

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); 
} 
2
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); 
} 

Il suppose que startDate < que endDate, vous obtenez les résultats sur la liste des "dates"

+0

Je sais dans VB.NET AddDays renvoie un objet de date qui doit être affecté. Il serait utilisé comme ceci "currentDate = currentDate.AddDays (1) .Je ne suis pas sûr si c'est la même chose en C# –

+0

Vous aviez raison, merci – albertein

2
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; 
} 

code non testé ... mais devrait fonctionner.

+0

je ne sais pas sur le calendrier asp.net, mais ça fonctionne très bien pour obtenir les dates entre la date de début et la date considérant que la date de fin est toujours supérieure à la date de début. – nccsbim071

1
// 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)); 
Questions connexes