## Who likes this?

4 people have marked this snippet as a favorite

# Method for adding working days to a date

/ Published in: C#

A quick search on the internet reveals all kinds of ways you can calculate with business days. I think is the most simple and efficient. In this example add day of week and weeks separately. The loop is never iterated more then 4 times regardless of the number of days being added.

`public DateTime AddWorkingDays(DateTime dtFrom, int nDays){    // determine if we are increasing or decreasing the days    int nDirection = 1;    if (nDays < 0)    {        nDirection = -1;    }     // move ahead the day of week    int nWeekday = nDays % 5;    while(nWeekday != 0)    {        dtFrom = dtFrom.AddDays(nDirection);         if (dtFrom.DayOfWeek != DayOfWeek.Saturday            && dtFrom.DayOfWeek != DayOfWeek.Sunday)        {            nWeekday -= nDirection;        }    }     // move ahead the number of weeks    int nDayweek = (nDays / 5) * 7;    dtFrom = dtFrom.AddDays(nDayweek);     return dtFrom;}`

Posted By: MLaritz on March 4, 2010

You can simplify this by not using nWeekDay and just using nDays. I created an extension method:

``````public static class DateTimeExtensions
{
{
int direction = days < 0 ? -1 : 1;

while(days != 0)
{
if(date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
{
days -= direction;
}
}

return date;
}
}
``````
Posted By: ybastiand on July 2, 2010

There is a bug in comment from MLaritz, at least when I change the method to be non extension. Fix is to assign the result of date.AddDays back in the date variable.

Here is my solution (unit tested): /// /// Add or remove some business days to a date time. /// /// /// /// public static DateTime AddBusinessDays(DateTime date, int days) { int direction = (days < 0) ? -1 : 1;

``````        while (days != 0)
{
if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
{
days -= direction;
}
}

return date;
}
``````
Posted By: ybastiand on July 2, 2010

There is a bug in comment from MLaritz, at least when I change the method to be non extension. Fix is to assign the result of date.AddDays back in the date variable.

Here is my solution (unit tested): /// /// Add or remove some business days to a date time. /// /// /// /// public static DateTime AddBusinessDays(DateTime date, int days) { int direction = (days < 0) ? -1 : 1;

``````        while (days != 0)
{
if (date.DayOfWeek != DayOfWeek.Saturday && date.DayOfWeek != DayOfWeek.Sunday)
{
days -= direction;
}
}

return date;
}
``````