본문 바로가기

javascript 해당 월의 주차, 시작일과 종료일 구하기

by 아카이sun 2023. 12. 27.

해당월의 주차를 구해야하는 일이 생겼다.

moment등에서 일반적으로 사용되는 주차를 반환하는 함수나 계산 방법으로는 요구사항에 맞지 않았기에 계산방법을 조금 다르게 하였다.

 

구하고자 하는 주차의 방식은 다음과 같다.

2023년 12월의 주차는 6주차이다.

1주차의 시작일과 종료일은 2023-11-26 ~ 2023-12-02 이며,

6주차의 시작일과 종료일은 2023-12-31 ~ 2024-01-06 이다.

이를 구하기 위해 자바스크립트로 다음과 같은 코드를 구현하였다.

// 해당월의 주차가 몇주차 까지 있는지 체크
function getWeekLength(start, end) {
    const startDate = start.clone();
    const endDate = end.clone();
    const weekObj = {};
    for(let i= 1; i <= endDate.date(); i++) {
        weekObj[startDate.weeks()] = startDate.weeks();
        startDate.add(1, 'day');
    }
    return Object.entries(weekObj).length;
}

// 해당월의 주차의 시작일과 종료일 구하기
function getWeekInMonth(year, month) {
    const startDate = moment([year, month]);
    const endDate = moment([year, month]).endOf('month');
    const weeks = [];

    const weekLength = getWeekLength(startDate, endDate);

    for(let i= 1; i <= weekLength; i++) {
        let weekStart = startDate.clone().startOf('week');
        let weekEnd = weekStart.clone().endOf('week');
        weeks.push({
            start: weekStart.format('YYYY-MM-DD'),
            end: weekEnd.format('YYYY-MM-DD')
        });
        startDate.add(1, 'week');
    }
    return weeks;
}

 

해당 함수를 이용해 2023년 12월을 테스트 해보면 다음과 같이 결과가 나온다.

*  자바스크립트에서 date를 사용할 때 월은 항상 -1이란것을 기억하자.

댓글