public static List <List <CalendarDay> > FillCalendarDays(DateTime value, FirstWeekDays firstWeekDay) { var weeks = new List <List <CalendarDay> >(); var startDay = GetFirstCalendarDate(value, firstWeekDay); var n = 0; for (var w = 1; w <= 6; w++) { var weekDays = new List <CalendarDay>(); for (var d = 1; d <= 7; d++) { var currentDay = startDay.AddDays(n); var calendarDay = new CalendarDay() { Date = currentDay }; calendarDay.IsActive = calendarDay.Day == value.Day && calendarDay.Date.Month == value.Month; calendarDay.IsAnotherMonth = calendarDay.Date.Month != value.Month; weekDays.Add(calendarDay); n++; } weeks.Add(weekDays); } return(weeks); }
public static DateTime GetFirstCalendarDate(DateTime value, FirstWeekDays firstWeekDay) { var startDay = new DateTime(value.Year, value.Month, 1); var shift = 0; if (firstWeekDay == FirstWeekDays.Sunday) { shift = (int)startDay.DayOfWeek; } else { shift = startDay.DayOfWeek == DayOfWeek.Sunday ? 6 : ((int)startDay.DayOfWeek) - 1; } startDay = startDay.AddDays(-shift); return(startDay); }