특정 날짜가 속한 달력의 모든 날짜를 반환하는 메서드입니다.
달력의 주는 일 ~ 토 순서로 되어 있습니다.
당월의 1일이 주의 처음(일요일)이 아닌 경우, 이전 달의 마지막 주 날짜들이 목록에 포함되고,
당월의 마지막 날짜가 주의 마지막(토요일)이 아닌 경우, 다음 달의 첫주 날짜들이 포함됩니다.
따라서, 목록의 총 개수는 7의 배수(28, 35, 42 중 하나)입니다.
public static IEnumerable<DateTime> ToCalendar(this DateTime date)
{
var monthfirst = new DateTime(date.Year, date.Month, 1);
var monthDays = DateTime.DaysInMonth(date.Year, date.Month);
var monthLast = new DateTime(date.Year, date.Month, monthDays);
var calendarFirst = monthfirst.AddDays(-(int)monthfirst.DayOfWeek);
var calendarLast = monthLast.AddDays(6 - (int)monthLast.DayOfWeek);
var dayCount = (calendarLast - calendarFirst).Days + 1;
for (int d = 0; d < dayCount; d++)
{
yield return calendarFirst.AddDays(d);
}
}