WIRN
WIRN

Reputation: 947

Get The next days but not weekends, asp.net c#

Im trying to get the next five weekdays and im stuck.

Ive started like this:

        List<DateTime> allWeekEndsInOneYear = new List<DateTime>();

        DateTime sDate = DateTime.Now;
        DateTime eDate = DateTime.Now.AddYears(1);

        TimeSpan diff = eDate - sDate;
        int days = diff.Days;
        for (var i = 0; i <= days; i++)
        {
            var testDate = sDate.AddDays(i);
            switch (testDate.DayOfWeek)
            {
                case DayOfWeek.Saturday:
                case DayOfWeek.Sunday:
                    allWeekEndsInOneYear.Add(testDate);
                    break;
            }
        }

        List<DateTime> daysToMark = new List<DateTime>();

        DateTime startDate = DateTime.Now;
        DateTime endDate = DateTime.Now.AddDays(5);

Now I need to fill daysToMark with the next 5 days excluding the weekeds (the ones in allWeekEndsInOneYear). Any help is very appreciated.

Upvotes: 1

Views: 3841

Answers (2)

LMB
LMB

Reputation: 1135

This will give you the next five days that are not a Saturday or Sunday.

var nextFiveWeekDays = new List<DateTime>();
var testDate = DateTime.Now.Date;

while (nextFiveWeekDays.Count()<5)
{
  if (testDate.DayOfWeek != DayOfWeek.Saturday && 
           testDate.DayOfWeek != DayOfWeek.Sunday)
     nextFiveWeekDays.Add(testDate);

testDate = testDate.AddDays(1);
}

Upvotes: 2

Sergey Berezovskiy
Sergey Berezovskiy

Reputation: 236228

You can add other days (which are not weekends) on default case of switch:

for (var i = 0; i <= days; i++)
{
    var testDate = sDate.AddDays(i);
    switch (testDate.DayOfWeek)
    {
        case DayOfWeek.Saturday:
        case DayOfWeek.Sunday:
            allWeekEndsInOneYear.Add(testDate);
            break;
        default:
            daysToMark.Add(testDate); // this is a workday
            break;
    } 
}

Also you don't need to calculate days count and use for loop. while(testDate <= eDate) will do the job:

var testDate = DateTime.Now;

while (testDate <= eDate)
{
    switch (testDate.DayOfWeek)
    {
       case DayOfWeek.Saturday:
       case DayOfWeek.Sunday:
            allWeekEndsInOneYear.Add(testDate);
            break;
       default:
            daysToMark.Add(testDate); // this is a workday
            break;
    }

    testDate = testDate.AddDays(1);
}

Upvotes: 3

Related Questions