public static DateTime FirstXDay(this DateTime date, int xday = 1) { var firstDay = date.FirstDayOfMonth(); DateTime result = new DateTime(); int count = 0; for (DateTime day = firstDay; count < 7; day = day.AddDays(1)) { if (OffDayProvider.IsXday(day, xday)) { //check if xday is before currentday try for next month if (day <= date) { day = date.AddMonths(1).FirstDayOfMonth().AddDays(-1); count = 0; continue; } result = day; break; } count++; } return(result); }
public static DateTime NthWeeksXDay(this DateTime date, int xday = 1, int week = 1) { var firstDay = date.FirstDayOfMonth(); DateTime nthWeekEnd = new DateTime(); int count = 0; for (DateTime day = firstDay.AddDays(7 * (week - 1)); count < 7; day = day.AddDays(1)) { if (OffDayProvider.IsEndOfWeek(day)) { nthWeekEnd = day; break; } count++; } var nthXDay = date.NthXDay(xday, week); if (nthXDay > nthWeekEnd && week == 1) { throw new Exception("NoSuchDateException"); } else if (nthXDay > nthWeekEnd) { nthXDay = nthXDay.AddDays(-7); } return(nthXDay); }
public static DateTime LastXDay(this DateTime date, int xday = 1) { var lastDay = date.LastDayOfMonth(); DateTime result = new DateTime(); int count = 0; for (DateTime day = lastDay; count < 7; day = day.AddDays(-1)) { if (OffDayProvider.IsXday(day, xday)) { result = day; break; } count++; } return(result); }
public static DateTime WorkingDay(this DateTime date, bool first = true) { var result = new DateTime(); var count = 1; for (var day = date; count <= 3; day = day.AddDays(first ? 1 : -1)) { if (!OffDayProvider.IsOffDay(day)) { result = day; break; } count++; } return(result); }