React

material-ui pickers, luxon 사용시 달력에서 일요일부터 시작되게 하기

블린더르 2020. 1. 13. 17:27

material-ui pickers 와 luxon 을 이용하여 picker 를 구현하면 날짜 선택시 월요일부터 시작하게 된다

보통의 달력처럼 일요일부터 시작하게 하려면 LuxonUtils 를 상속하여 CustomLuxonUtils 를 생성하여 사용하면 된다.

class CustomLuxonUtils extends LuxonUtils {
  public getWeekdays(): string[] {
    const weekDays = LuxonUtils.prototype.getWeekdays();
    const lastDay = weekDays.pop();
    if (lastDay != null) {
      weekDays.unshift(lastDay);
    }
    return weekDays;
  }

  public getWeekArray(date: DateTime): DateTime[][] {
    // 달력 칸 수 계산
    const {days} = date
      .endOf('month')
      .endOf('week')
      .diff(date.startOf('month').startOf('week'), 'days')
      .toObject();

    let weeks: any[] = [];

    if (days != null) {
      new Array(Math.round(days))
        .fill(0)
        .map((_, i) => i)
        .map(day => {
          return date
            .startOf('month')
            .startOf('week')
            .minus({days: 1})
            .plus({days: day});
        })
        .forEach((v, i) => {
          if (i === 0 || (i % 7 === 0 && i > 6)) {
            weeks.push([v]);
            return;
          }

          weeks[weeks.length - 1].push(v);
        });

      weeks = weeks.filter(week => {
        return (
          week[0].hasSame(date, 'month') ||
          week[week.length - 1].hasSame(date, 'month')
        );
      });
    }

    return weeks;
  }
}

참고 자료

material-ui-pickers
luxon
https://github.com/mui-org/material-ui-pickers/issues/1270
https://codesandbox.io/s/material-ui-pickers-usage-demo-w9n8i

반응형