간단한 코드로 일자로 몇 주차인지 구하는 코드와 주차로 월요일과 일요일을 구하는 코드를 함수로 적어놓겠습니다.
일자로 주차를 구하는 코드
// 일자를 주차로 변경하는 코드 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으로 설정해주면 월~일요일까지 수정할 수 있다.