Tuesday, October 13, 2009

Add Working Days Only to a Date (Excluding Sat & San)

private DateTime getWorkingDate(DateTime dtFrom, int nDays)
{
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;
}

Calculate week days between two dates (Excluding Sat & Sun)

int getWeekdays(DateTime dtmStart, DateTime dtmEnd)
{
// This function includes the start and end date if it falls on a weekday
int dowStart = ((int)dtmStart.DayOfWeek == 0 ? 7 : (int)dtmStart.DayOfWeek);
int dowEnd = ((int)dtmEnd.DayOfWeek == 0 ? 7 : (int)dtmEnd.DayOfWeek);
TimeSpan tSpan = dtmEnd - dtmStart;
if (dowStart <= dowEnd) { return (((tSpan.Days / 7) * 5) + Math.Max((Math.Min((dowEnd + 1), 6) - dowStart), 0)); } else { return (((tSpan.Days / 7) * 5) + Math.Min((dowEnd + 6) - Math.Min(dowStart, 6), 5)); } }