자바스크립트를 이용한 년주차 계산의 오류

조회수 2040회

제가 자바스크립트를 이용해서 년주차를 계산을 하는공식을 만들었는데 특정부분에서만 오류가 발생을 하였는데 저는 어찌해결해야 할지 몰라서 글을 올리게 되었습니다.
오류는 12월 어떤일자를 넣든 무조건 결과각 1로 리턴에 되는것이고 3월 1일이나 2일이 달력 확인을 해보면 9주차인데도 불구하고 10주차로 나오는 오류가 발생을 하였습니다. 저의 코드에 어떠한 문제가 있는지 잘모르겟습니다.

function weekCount(today) { 

var year = dt.getFullYear();

var countDay = new Date(year,1,1);

var week = 1;

while(today>countDay){

 countDay.setDate(countDay.getDate()+ 1);

    var countNum = countDay.getDay();

       if(countNum == 0){
        week++;
        }//if
    }//while
return week;

}//funtcion

var dt = new Date(2017, 11, 30); 

console.log(weekCount(dt));

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    일단 12월의 문제를 답변 드리면...

    console.log(new Date(2017, 12, 1));
    

    이렇게 하면 2017년 12월 1일로 Date 객체가 생길 것 같지만 실제로는 2018년 1월 1일의 Date 객체가 생깁니다. MDN에 따르면 이는 정상 동작입니다.

    monthIndex
    월을 나타내는 정숫값. 0은 1월을 나타내고 11은 12월을 나타냅니다.


    "3월 1일이 실제로는 9주차인데 10주차로 나온다" 하는 부분은, 요일 계산 규칙을 정한 다음 그걸 반영해줘야 하는 부분 같습니다. 찾아보니 "목요일이 포함된 첫번째 주"가 제1주차 라고 하네요. 그래서 데모를 좀 짜보았습니다. while 루프는 쓰지 않았는데 어떻게 도움이 될까요?

    function weekCount(dt) {
        const day = 1000 * 60 * 60 * 24;
        var thisDay = dt;
        var theFirstDay = new Date(dt.getFullYear(), 0, 1);
        var theFirstDayOfWeek = theFirstDay.getDay();
        if (theFirstDayOfWeek > 4) {
            theFirstDay.setDate(theFirstDayOfWeek - 4 - 1 + 7);
        } else {
            theFirstDay.setDate(4 - theFirstDayOfWeek + 1);
        }
        var diff = Math.abs(thisDay.getTime() - theFirstDay.getTime()) / day;
        return Math.ceil(diff / 7);
    }
    
    • 도와주셔서 감사합니다 김경섭 2019.8.12 15:06

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)