달력 날짜 목록을 반환하는 DateTime Extension 메서드

특정 날짜가 속한 달력의 모든 날짜를 반환하는 메서드입니다.

달력의 주는 일 ~ 토 순서로 되어 있습니다.

당월의 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);
        }
    }
6개의 좋아요