간단한 코드로 일자로 몇 주차인지 구하는 코드와 주차로 월요일과 일요일을 구하는 코드를 함수로 적어놓겠습니다.

 

일자로 주차를 구하는 코드

// 일자를 주차로 변경하는 코드 ex) getWeekly(new Date("2024-01-28"));
function getWeekly(date: Date) {
  const currentDate = date.getDate();
  // const firstDay = new Date(date.setDate(0)).getDay(); 안의 값을 0 -> 1로 교체 시 일요일 시작
  const firstDay = new Date(date.setDate(0)).getDay();
  return Math.ceil((currentDate + firstDay) / 7);
}

 

이 함수를 사용하면 일자를 입력 시 몇 주차인지 출력할 수 있습니다.

현재 함수는 월요일 시작을 기준이지만 위에 적힌것처럼 setDate에 숫자를 1로 교체 시 일요일을 시작일로 바꿀 수 있습니다.

 

주차로 월요일 일요일 일자를 구하는 코드

// 주차를 월요일부터 일요일까지 출력되도록 하는 코드
function getWeekDates(
  year: number,
  month: number,
  weekNumber: number
): {
  monday: string;
  sunday: string;
} {
  const firstDay = new Date(year, month - 1, 1);
  const firstDayOfWeek = firstDay.getDay(); // 월요일이 0, 일요일이 6

  const startDate = new Date(firstDay);
  
  // 시작일을 일요일로 지정
  // startDate.setDate(1 - firstDayOfWeek + (firstDayOfWeek === 0 ? -7 : 0) + (weekNumber - 1) * 7);
  
  // 시작일을 월요일로 지정
  startDate.setDate(1 - firstDayOfWeek + (firstDayOfWeek === 0 ? -6 : 1) + (weekNumber - 1) * 7);

  const monday = new Date(startDate);
  const sunday = new Date(monday);
  sunday.setDate(monday.getDate() + 6);

  return {
    monday: `${monday.getFullYear()}-${(monday.getMonth() + 1).toString().padStart(2, "0")}-${monday.getDate().toString().padStart(2, "0")} 00:00:00`,
    sunday: `${sunday.getFullYear()}-${(sunday.getMonth() + 1).toString().padStart(2, "0")}-${sunday.getDate().toString().padStart(2, "0")} 23:59:59`,
  };
}

이 함수는 연도, 월, 주차를 입력하면 월요일과 일요일 일자가 출력된다.

일요일을 시작일로 하고 싶다면  위에 적인 것처럼 startDate의 날짜입력을 바꿔주면 된다.

일주일의 모든 일자를 구하고 싶다면,

 sunday.setDate(monday.getDate() + 6);

마지막의 일자 설정 시 1~6으로 설정해주면 월~일요일까지 수정할 수 있다.