반응형
자바스크립트
주차별 기간 구하기
// 해당하는 주차(이번주차) 기간 화면에 셋팅하기
function funcNowWeek() {
var nowYmd = '20240103'
var selectedWeekPeriod = funcPeriodWeek(nowYmd);
// ex) 2024-01-01 ~ 2024-01-07
var titleText = " 주차 : " + selectedWeekPeriod;
self.$subTitle.text(titleText);
}
// 기간 구하기 (sampleWeek)
function funcPeriodWeek(selectedYmd) {
// 선택된 날짜의 기준 목요일 가져오기
var selectedThursdayYmd = sampleWeek.getDateThursdayThisWeek(selectedYmd);
var selectedThursdayObj = sampleWeek.getDateObjByYmd(selectedThursdayYmd);
// 선택된 날짜의 월요일 가져오기
var selectedMondayYmd = sampleWeek.getYmdByDateObj(sampleWeek.getDateObjAddDate(selectedThursdayObj, -3));
// 선택된 날짜의 일요일 가져오기
var selectedSundayYmd = sampleWeek.getYmdByDateObj(sampleWeek.getDateObjAddDate(selectedThursdayObj, 3));
var result = selectedMondayYmd.substring(0, 4) + "-"
+ selectedMondayYmd.substring(4, 6) + "-"
+ selectedMondayYmd.substring(6, 8)
+ " ~ "
+ selectedSundayYmd.substring(0, 4) + "-"
+ selectedSundayYmd.substring(4, 6) + "-"
+ selectedSundayYmd.substring(6, 8);
weekStart = selectedMondayYmd;
weekEnd = selectedSundayYmd;
return result;
}
var sampleWeek = {
/**
* 두 날짜의 주차수 차이를 반환한다.
*
*/
getWeekNumOfTwoDate: function (ymd1, ymd2) {
// 두 날짜의 기준 목요일을 구한다.
var thursdayYmd1 = this.getDateThursdayThisWeek(ymd1);
var thursdayYmd2 = this.getDateThursdayThisWeek(ymd2);
// 날짜의 크기별로 변수에 넣는다.
var beforeYmd = thursdayYmd1;
var afterYmd = thursdayYmd2;
if (thursdayYmd1 > thursdayYmd2) {
beforeYmd = thursdayYmd2;
afterYmd = thursdayYmd1;
}
var periodWeek = 0;
while (beforeYmd <= afterYmd) {
var beforeObj = this.getDateObjByYmd(beforeYmd);
var d = this.getDateObjAddDate(beforeObj, 7);
beforeYmd = this.getYmdByDateObj(d);
periodWeek++;
}
return periodWeek;
},
/**
* 해당월의 주차수를 반환한다.
*
*/
getWeekNumOfMonthTsst: function (ymd) {
// 이번달 1일을 셋팅한다.
var thisMonthD = new Date(this.getModeValueByYmd(ymd, "year"), getModeValueByYmd(ymd, "month") - 1, 1);
// 다음달 1일을 셋팅한다.
var nextMonthD = new Date(this.getModeValueByYmd(ymd, "year"), getModeValueByYmd(ymd, "month"), 1);
// 이번달 1일에 해당하는 기준 목요일을 구한다.
var thisThursdayYmd = this.getDateThursdayThisWeek(getYmdByDateObj(thisMonthD));
// 다음달 1일에 해당하는 기준 목요일을 구한다.
var nextThursdayYyyyMmDd = this.getDateThursdayThisWeek(getYmdByDateObj(nextMonthD));
var periodWeek = 0;
while (thisThursdayYmd <= nextThursdayYyyyMmDd) {
var thisThursdayObj = this.getDateObjByYmd(thisThursdayYmd);
var d = this.getDateObjAddDate(thisThursdayObj, 7);
thisThursdayYmd = this.getYmdByDateObj(d);
periodWeek++;
}
return periodWeek;
},
/**
* 해당월의 몇번째 주인지를 반환한다.
*
*/
getCountWeekOfMonthTsst: function (ymd) {
// 해당일의 기준이 되는 목요일을 구하자.
var thisThursdayYmd = this.getDateThursdayThisWeek(ymd);
// 해당월의 첫번째 목요일을 구하자.
var firstThursdayYmd = this.getDateFirstWeekThursdayOfMonthTsst(ymd);
var periodWeek = 0;
while (firstThursdayYmd < thisThursdayYmd) {
var firstThursdayObj = this.getDateObjByYmd(firstThursdayYmd);
var d = this.getDateObjAddDate(firstThursdayObj, 7);
firstThursdayYmd = this.getYmdByDateObj(d);
periodWeek++;
}
return periodWeek + 1;
},
/**
* 해당월의 첫주 시작 목요일을 구한다.
*
*/
getDateFirstWeekThursdayOfMonthTsst: function (ymd) {
// 해당월의 시작일(1월 1일)을 셋팅하기
var firstDateYmd = ymd.substring(0, 6) + "01";
var mm = this.getModeValueByYmd(ymd, "month");
// 기준이 되는 목요일을 구하자.
var firstThursdayYmd = this.getDateThursdayThisWeek(firstDateYmd);
var firstThursdayMm = this.getModeValueByYmd(firstThursdayYmd, "month");
// 기준이 되는 목요일이 작년이라면 7일을 더하자.
if (firstThursdayMm != mm) {
var firstThursdayObj = this.getDateObjByYmd(firstThursdayYmd);
var d = this.getDateObjAddDate(firstThursdayObj, 7);
firstThursdayYmd = this.getYmdByDateObj(d);
}
return firstThursdayYmd;
},
/**
* 해당월의 마지막주 종료 목요일을 구한다.
*
*/
getDateLastWeekThursdayOfMonthTsst: function (ymd) {
// 해당월의 마지막날짜를 셋팅하자
var lastD = new Date(this.getModeValueByYmd(ymd, "year"), this.getModeValueByYmd(ymd, "month"), 0);
var mm = this.getModeValueByYmd(ymd, "month");
var lastDateYmd = this.getYmdByDateObj(lastD);
// 기준이 되는 목요일을 구하자.
var lastThursdayYmd = this.getDateThursdayThisWeek(lastDateYmd);
var lastThursdayMm = this.getModeValueByYmd(lastThursdayYmd, "month");
// 기준이 되는 목요일이 다음월이라면 7일을 빼자.
if (lastThursdayMm != mm) {
var lastThursdayObj = this.getDateObjByYmd(lastThursdayYmd);
var d = this.getDateObjAddDate(lastThursdayObj, -7);
lastThursdayYmd = this.getYmdByDateObj(d);
}
return lastThursdayYmd;
},
/**
* 해당년도의 첫주 시작 목요일을 구한다.
*
*/
getDateFirstWeekThursdayOfYearTsst: function (yyyy) {
// 해당년의 시작일(1월 1일)을 셋팅하기
var firstDateYmd = yyyy + "0101";
// 기준이 되는 목요일을 구하자.
var firstThursdayYmd = this.getDateThursdayThisWeek(firstDateYmd);
var firstThursdayYyyy = this.getModeValueByYmd(firstThursdayYmd, "year");
// 기준이 되는 목요일이 작년이라면 7일을 더하자.
if (firstThursdayYyyy != yyyy) {
var firstThursdayObj = this.getDateObjByYmd(firstThursdayYmd);
var d = this.getDateObjAddDate(firstThursdayObj, 7);
firstThursdayYmd = this.getYmdByDateObj(d);
}
return firstThursdayYmd;
},
/**
* 해당년도의 마지막주 종료 목요일을 구한다.
*
*/
getDateLastWeekThursdayOfYearTsst: function (yyyy) {
// 해당년도의 마지막날짜(12월 31일)을 셋팅하자
var lastDateYmd = yyyy + "1231";
// 기준이 되는 목요일을 구하자.
var lastThursdayYmd = this.getDateThursdayThisWeek(lastDateYmd);
var lastThursdayYyyy = this.getModeValueByYmd(lastThursdayYmd, "year");
// 기준이 되는 목요일이 내년이라면 7일을 빼자.
if (lastThursdayYyyy != yyyy) {
var lastThursdayObj = this.getDateObjByYmd(lastThursdayYmd);
var d = this.getDateObjAddDate(lastThursdayObj, -7);
lastThursdayYmd = this.getYmdByDateObj(d);
}
return lastThursdayYmd;
},
/**
* 해당일의 년도를 가져오자.
*/
getYearByYmd: function (ymd) {
var thursdayYmd = this.getDateThursdayThisWeek(ymd);
return thursdayYmd.substring(0, 4);
},
/**
* 한주의 기준이 되는 목요일을 구하자.
* - 목요일을 기준으로 앞뒤 3일이 한주가 된다.
*/
getDateThursdayThisWeek: function (ymd) {
var yyyy = this.getModeValueByYmd(ymd, "year");
var mm = this.getModeValueByYmd(ymd, "month") - 1;
var dd = this.getModeValueByYmd(ymd, "date");
var d = new Date(yyyy, mm, dd);
var dayOfWeek = d.getDay(); // 일요일~토요일(0~6)
var addDate = 0;
// 일요일은 3일을 빼서 목요일을 구한다.
if (dayOfWeek == 0) addDate = -3;
else addDate = 4 - dayOfWeek;
// 구한날짜만큼 더한다.
var thursdayD = this.getDateObjAddDate(d, addDate);
return this.getYmdByDateObj(thursdayD);
},
/**
* yyyyMmDd 입력받아서 년/월/일 반환하기
*
*/
getModeValueByYmd: function (ymd, mode) {
var result = ymd;
if (ymd && ymd.length == 8) {
if (mode == "year") result = ymd.substring(0, 4);
if (mode == "month") result = ymd.substring(4, 6);
if (mode == "date") result = ymd.substring(6, 8);
if (result) result = parseInt(result);
}
return result;
},
/**
* 날짜객체 입력받아서 yyyyMMdd 반환하기
*
*/
getYmdByDateObj: function (dateObj) {
var yyyy = dateObj.getFullYear();
var mm = dateObj.getMonth() + 1;
var dd = dateObj.getDate();
if (mm < 10) mm = "0" + mm;
if (dd < 10) dd = "0" + dd;
var result = yyyy + "" + mm + "" + dd;
return result;
},
/**
* yyyyMMdd 입력받아서 날짜객체 반환하기
*
*/
getDateObjByYmd: function (ymd) {
var yyyy = this.getModeValueByYmd(ymd, "year");
var mm = this.getModeValueByYmd(ymd, "month") - 1;
var dd = this.getModeValueByYmd(ymd, "date");
var resultD = new Date(yyyy, mm, dd);
return resultD;
},
/**
* 날짜객체 입력 받아서 해당날짜만큼 더해서 날짜객체 반환하기
*
*/
getDateObjAddDate: function (dateObj, addDate) {
var resultD = new Date(dateObj.getFullYear(), dateObj.getMonth(), dateObj.getDate() + addDate);
return resultD;
}
}
반응형
'ETC' 카테고리의 다른 글
새로운 데이터 페칭 라이브러리 TanStack Query (0) | 2024.06.27 |
---|---|
[ETC] Maven Eclipse 내에서 source 와 Javadoc 다운로드 (0) | 2020.07.03 |
댓글