Hi,
Today I needed a simple code that returns the business days between two dates and ended with this:
Today I needed a simple code that returns the business days between two dates and ended with this:
public static int GetFullWorkingDaysBetween(DateTime firstDate, DateTime lastDate, IEnumerableholidays) { if (firstDate > lastDate)// Swap the dates if firstDate > lastDate { DateTime tempDate = firstDate; firstDate = lastDate; lastDate = tempDate; } int days = (int)(lastDate.Subtract(firstDate).Ticks / TimeSpan.TicksPerDay); int weekReminder = days % 7; if (weekReminder > 0) { switch (firstDate.DayOfWeek) { case DayOfWeek.Monday: days = days - ((weekReminder > 5) ? 1 : 0); // Another way for this: //days = days - ((int)weekReminder % 5); // but i think its more expensive break; case DayOfWeek.Tuesday: days = days - ((weekReminder > 4) ? 1 : 0) - ((weekReminder > 5) ? 1 : 0); // The same from above //days = days - ((int)weekReminder % 4); break; case DayOfWeek.Wednesday: days = days - ((weekReminder > 3) ? 1 : 0) - ((weekReminder > 4) ? 1 : 0); break; case DayOfWeek.Thursday: days = days - ((weekReminder > 2) ? 1 : 0) - ((weekReminder > 3) ? 1 : 0); break; case DayOfWeek.Friday: days = days - ((weekReminder > 1) ? 1 : 0) - ((weekReminder > 2) ? 1 : 0); break; case DayOfWeek.Saturday: days = days - 1 - ((weekReminder > 1) ? 1 : 0); break; case DayOfWeek.Sunday: days = days - 1; break; } } days = days - (2 * ((int)days / 7)); if (holidays != null && holidays.Count() > 0) { foreach (DateTime holiday in holidays.Where(h => h >= firstDate && h < lastDate)) { DayOfWeek dayOfWeekOfHoliday = holiday.DayOfWeek; if (dayOfWeekOfHoliday != DayOfWeek.Saturday && dayOfWeekOfHoliday != DayOfWeek.Sunday) { days = days - 1; } } } return days; }
Comments
Post a Comment