자바스크립트를 이용한 년주차 계산의 오류
조회수 2039회
제가 자바스크립트를 이용해서 년주차를 계산을 하는공식을 만들었는데 특정부분에서만 오류가 발생을 하였는데 저는 어찌해결해야 할지 몰라서 글을 올리게 되었습니다.
오류는 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 답변
-
일단 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); }
댓글 입력