안녕하세요.
오늘은 지난번 해당 연도의 주차 수 구하기 (https://sancode.tistory.com/38)에 이어서 해당 월의 주차 수 구하는 방법을 포스팅하려고 합니다. 연도 기준으로 구하는 방법과 비슷합니다. 그럼 바로 시작하겠습니다.
1. getMonthOfWeek() 해당 월 기준의 주차 수 구하기
<script>
/**
* Document load
*/
document.addEventListener('DOMContentLoaded', () => {
// 기준 날짜
const standDate = new Date('2020-11-22');
// 해당 월의 주차 구하기
const monthOfWeek = getMonthOfWeek(standDate);
console.log((standDate.getMonth() + 1) + '월 ' + monthOfWeek + '주 차');
});
/**
* 해당 월의 주차 수 구하기
*
*/
function getMonthOfWeek (date) {
const currDate = date;
// 해당 월의 1일
const firstDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);
// 일 수 구하기 : 기준 날짜 - 해당 월의 시작 날짜
const diffDate = currDate.getTime() - firstDate.getTime();
// 일 수 구하기 시 * 분 * 초 * 밀리초 (주 시작 요일이 일요일인 경우 +1)
const diffDay = Math.abs(diffDate / (24 * 60 * 60 * 1000)) + 1;
// 일주 7일 기준으로 나누기
return Math.ceil(diffDay / 7);
}
</script>
먼저 월 기준의 주차를 구하는 getMonthOfWeek() 함수를 만들었습니다.
구할 날짜를 인자값으로 받고, 인자값의 날짜 기준으로 해당 월의 1일을 세팅합니다.
* 변수 설명
- currDate : 주차 수를 구할 기준 날짜
- firstDate : 해당 월에서 1일로 맞춘 연도의 첫 번째 날짜
- diffDate : 기준 날짜에서 해당월 날짜 뺀 날짜 (기준 날짜가 해당 월의 몇 번째 일수인지 구하기)
위의 날짜들을 구하고 난 후에 마지막 diffDate 날짜를 일수로 계산을 하고 일주 7일 기준으로 나눠줍니다.
* 일주의 시작 요일 정하기
- 일요일 시작일 : const diffDay = Math.abs(diffDate / (24 * 60 * 60 * 1000)) + 1;
- 월요일 시작일 : const diffDay = Math.abs(diffDate / (24 * 60 * 60 * 1000));
여기서 일주일의 시작 요일을 월요일로 했을 때에는 diffDay 마지막에 +1을 빼고, 일요일로 했을 때에는 +1을 해주면 됩니다.
위의 함수를 사용하여 날짜를 '2020-11-22' 기준으로 실행한 결과
실행 결과 해당 월의 주차 수가 잘 나왔습니다.
지난번 포스팅했던 해당 연도 기준의 주차 수 구하는 함수와 비교를 해보니 간단하게 함수를 합쳐서 사용해도 괜찮을 것 같아서 함수를 합쳐봤습니다.
2. getDateOfWeek() 연도별 월별 기준의 주차 수 구하기
<script>
/**
* Document load
*/
document.addEventListener('DOMContentLoaded', () => {
// 기준 날짜
const standDate = new Date('2020-11-22');
// getYearOfWeek : 해당 연도의 주차 구하기
const yearOfWeek = getYearOfWeek(standDate);
// getMonthOfWeek : 해당 월의 주차 구하기
const monthOfWeek = getMonthOfWeek(standDate);
// getDateOfWeek : 공통 함수를 이용한 해당 연도의 주차 구하기
const yOfWeek = getDateOfWeek(standDate, 'year');
// getDateOfWeek : 공통 함수를 이용한 해당 월의 주차 구하기
const mOfWeek = getDateOfWeek(standDate, 'month');
console.log(standDate.getFullYear() + '년 ' + yearOfWeek + '주 차');
console.log((standDate.getMonth() + 1) + '월 ' + monthOfWeek + '주 차');
console.log(standDate.getFullYear() + '년 ' + yOfWeek + '주 차');
console.log((standDate.getMonth() + 1) + '월 ' + mOfWeek + '주 차');
});
/**
* 해당 연도의 주차 수 구하기
*
*/
function getYearOfWeek (date) {
// 기준 날짜
const currDate = date;
// 해당 연도 1월1일
const firstDate = new Date(date.getFullYear(), 0, 1);
// 일 수 구하기 : 기준 날짜 - 해당연도 시작 날짜
const diffDate = currDate.getTime() - firstDate.getTime();
// 일 수 구하기 시 * 분 * 초 * 밀리초 (주 시작 요일이 일요일인 경우 +1)
const diffDay = Math.abs(diffDate / (24 * 60 * 60 * 1000)) + 1;
// 일주 7일 기준으로 나누기
return Math.ceil(diffDay / 7);
}
/**
* 해당 월의 주차 수 구하기
*
*/
function getMonthOfWeek (date) {
const currDate = date;
// 해당 월의 1일
const firstDate = new Date(currDate.getFullYear(), currDate.getMonth(), 1);
// 일 수 구하기 : 기준 날짜 - 해당 월의 시작 날짜
const diffDate = currDate.getTime() - firstDate.getTime();
// 일 수 구하기 시 * 분 * 초 * 밀리초 (주 시작 요일이 일요일인 경우 +1)
const diffDay = Math.abs(diffDate / (24 * 60 * 60 * 1000)) + 1;
// 일주 7일 기준으로 나누기
return Math.ceil(diffDay / 7);
}
/**
* 지정 유형 기준의 주차 수 구하기
* - type : month, year
*/
function getDateOfWeek (date, type) {
const currDate = date;
let month = 0;
// 해당 월 : 현재 날짜의 월
if (type === 'month') {
month = currDate.getMonth();
// 해당 연도 : 1월
} else if (type === 'year') {
month = 0;
}
// 해당 월의 1일
const firstDate = new Date(currDate.getFullYear(), month, 1);
// 일 수 구하기 : 기준 날짜 - 해당 월의 시작 날짜
const diffDate = currDate.getTime() - firstDate.getTime();
// 일 수 구하기 시 * 분 * 초 * 밀리초 (주 시작 요일이 일요일인 경우 +1)
const diffDay = Math.abs(diffDate / (24 * 60 * 60 * 1000)) + 1;
// 일주 7일 기준으로 나누기
return Math.ceil(diffDay / 7);
}
</script>
비교를 위해서 지난번 포스팅했던 연도 기준의 주수 구하기와 같이 소스 코드를 작성하였습니다.
- 해당 연도의 주수 구하기 : getYearOfWeek()
- 해당 월의 주수 구하기 : getMonthOfWeek()
- 해당 유형의 주수 구하기 : getDateOfWeek() <= type을 받아 월 또는 연도 기준으로 처리
위의 소스 코드를 실행한 결과는 아래와 같습니다.
각각의 함수를 사용했을 때와 합친 함수를 사용했을 때의 결과는 동일하게 나옵니다!
마무리
오늘은 이렇게 지난번에 포스팅했던 해당연도의 주수 구하는 방법과 함께 월의 주수 구하는 방법까지 알아보고, 두 함수를 합쳐서 처리하는 방법까지 포스팅해 봤습니다. 생각한 것보다 간단하게 처리가 돼서 다행이네요! 날짜를 구하는 방법과 표현하는 방법은 워낙 다양하기 때문에 다음 포스팅에도 계속해서 날짜를 다루는 내용을 포스팅하도록 하겠습니다.
그럼 오늘도 저의 작고 소중한 글을 읽어주셔서 감사합니다.

* 해당 연도의 주차 구하기
https://sancode.tistory.com/38
'javascript > javascript' 카테고리의 다른 글
[javascript] 자바스크립트 배열 요소 삭제 (slice, splice, delete, filter 비교 정리) (0) | 2023.01.08 |
---|---|
[javascript] 자바스크립트 특정 문자 찾기 (indexOf, includes, search 비교 정리) (0) | 2023.01.07 |
[javascript] 자바스크립트 쿠키 저장, 조회, 삭제 배우기 (Cookie) (0) | 2023.01.06 |
[javascript] 자바스크립트 해당연도의 주차수 구하기 (0) | 2023.01.06 |
[javascript] 자바스크립트 날짜 포맷 알아보자! (date format, date parse) (0) | 2022.12.30 |