공통
- iso의 한주의 시작요일은 월요일(js에서 월요일은 1이고, 일요일은 7이다)
- iso의 연주차를 계산하는 방법 (우리나라 방법이랑 동일)
* 예) 1월 1일이 금요일부터 시작하면, 해당주는 이전해의 마지막달의 주
- 예) 1월 1일이 금요일이전(금요일 미포함, 목요일까지만)에 시작하면, 해당주는 1월의 첫번째주가 된다
월요일날짜를 입력하면 해당 월요일의 Y년M월N주차를 리턴
function getWeekIndexOfMonthFromMondayDate(targetMondayDate) {
let startDate = null
if (targetMondayDate.getMonth() == 0){
startDate = new Date(targetMondayDate.getFullYear()-1, 12-1, 1);
}
else{
startDate = new Date(targetMondayDate.getFullYear(), targetMondayDate.getMonth()-1, 1);
}
let currentDate = new Date(startDate)
let currentYear = startDate.getFullYear();
let currentMonth = startDate.getMonth() + 1;
let currentWeekIndex = 0;
let mondayDate = null;
if (currentDate.getDay() < 5) {
currentWeekIndex += 1;
currentDate.setDate(currentDate.getDate() - currentDate.getDay() + 1);
}
else {
currentDate.setDate(currentDate.getDate() + 8 - currentDate.getDay());
}
while (currentDate <= targetMondayDate) {
currentWeekIndex += 1;
if (currentMonth != (currentDate.getMonth() +1)){
currentWeekIndex =1
}
currentMonth = currentDate.getMonth()+1;
currentYear = currentDate.getFullYear();
mondayDate = new Date(currentDate);
let tempDate = new Date(currentDate);
tempDate.setDate(tempDate.getDate() + 3);
if (tempDate.getMonth() != currentDate.getMonth()){
currentWeekIndex =1
currentYear = tempDate.getFullYear();
currentMonth = tempDate.getMonth()+1;
}
currentDate.setDate(currentDate.getDate() + 7);
}
return {
id: currentYear * 10000 + currentMonth * 100 + currentWeekIndex,
year: currentYear,
month: currentMonth,
weekIndex: currentWeekIndex,
mondayDate: mondayDate
};
}
연중주차번호를 입력하면 해당 주의 월요일 날짜를 리턴
function getMondayDateFromWeekNumberOfYear(year, weekNumber) {
let date = new Date(year, 0, 1);
let mondayDate = new Date(date);
if (date.getDay() == 1) {
}
else if (date.getDay() < 5) {
let days_to_del_for_prev_monday = date.getDay() + 1;
mondayDate.setDate(mondayDate.getDate() - days_to_del_for_prev_monday);
}
else {
let days_to_add_for_next_monday = 7 - date.getDay() + 1;
mondayDate.setDate(mondayDate.getDate() + days_to_add_for_next_monday);
}
mondayDate.setDate(mondayDate.getDate() + (weekNumber-1) * 7);
return mondayDate;
}