/*
두 기간 이 몇년, 몇개월, 몇일 차이 인지 계산
c_sta_ymd : 시작날짜
c_end_ymd : 종료날짜
c_gubun : 반환받을 날짜 포맷 ex) yy-mm-dd, mm-dd, dd ...
c_sta_yn : 시작일도 포함할지 여부
ex) f_sys_between_ymd(sta_date, end_date, 'yy-mm-dd','y')
*/
function f_sys_between_ymd(c_sta_ymd, c_end_ymd, c_gubun, c_sta_yn) {
var v_sta_ymd, v_end_ymd;
var v_yy, v_mm, v_dd;
var v_yy_t, v_mm_t, v_mm_mod, v_dd_t, v_dd_y_mod, v_mdd_m_mod;
var v_yy_pos, v_mm_pos, v_dd_pos;
var day_value = 24*60*60*1000;
var v_ret = c_gubun;
if (c_sta_ymd == "" || c_end_ymd == "") {
return "";
}
v_sta_ymd = makeDateFormat(c_sta_ymd); // javascript 날짜형변수로 변환
v_end_ymd = makeDateFormat(c_end_ymd); // javascript 날짜형변수로 변환
if (v_sta_ymd == "") return "";
if (v_end_ymd == "") return "";
if (c_sta_yn.toUpperCase() == "Y") {
v_sta_ymd = new Date(v_sta_ymd.getYear(), v_sta_ymd.getMonth(), v_sta_ymd.getDate()-1);
}
v_yy_t = parseInt(months_between(c_end_ymd, c_sta_ymd)/12); // 월 기간 계산
v_mm_t = parseInt(months_between(c_end_ymd, c_sta_ymd)); // 년도 기간 계산
v_mm_mod = parseInt(months_between(c_end_ymd, c_sta_ymd))%12; // 년도 제외한 월 기간 계산
v_dd_t = parseInt((v_end_ymd - v_sta_ymd)/day_value); // 일자 기간 계산
v_dd_y_mod = parseInt((v_end_ymd - add_months(c_sta_ymd, v_yy_t * 12))/day_value); // 년도 제외한 일자 기간 계산
v_dd_m_mod = parseInt((v_end_ymd - add_months(c_sta_ymd, (v_yy_t * 12) + v_mm_mod))/day_value); // 년월 제외한 일자기간 계산
v_yy_pos = c_gubun.indexOf('yy'.toLowerCase(),0); // 년도 구분자 위치 검색
v_mm_pos = c_gubun.indexOf('mm'.toLowerCase(),0); // 월 구분자 위치 검색
v_dd_pos = c_gubun.indexOf('dd'.toLowerCase(),0); // 일자 구분자 위치 검색
if (v_yy_pos > -1 && v_mm_pos > -1 && v_dd_pos > -1) { // yy년 mm월 dd일 형태
v_yy = v_yy_t;
v_mm = v_mm_mod;
v_dd = v_dd_m_mod;
} else if (v_yy_pos > -1 && v_mm_pos > -1 && v_dd_pos == -1) { // yy년 mm월 형태
v_yy = v_yy_t;
v_mm = v_mm_mod;
} else if (v_yy_pos > -1 && v_mm_pos == -1 && v_dd_pos > 0) { // yy년 dd일 형태
v_yy = v_yy_t;
v_dd = v_dd_y_mod;
} else if (v_yy_pos > -1 && v_mm_pos == -1 && v_dd_pos == -1) { // yy년 형태
v_yy = v_yy_t;
} else if (v_yy_pos == -1 && v_mm_pos > -1 && v_dd_pos > -1) { // mm월 dd일 형태
v_mm = v_mm_t;
v_dd = v_dd_m_mod;
} else if (v_yy_pos == -1 && v_mm_pos == -1 && v_dd_pos > -1) { // dd일 형태
v_dd = v_dd_t;
} else if (v_yy_pos == -1 && v_mm_pos > -1 && v_dd_pos == -1) { // mm월 형태
v_mm = v_mm_t;
}
if (v_mm < 10) v_mm = "0" + v_mm;
if (v_dd < 10) v_dd = "0" + v_dd;
//년,월,일 해당 내용 변환
v_ret = v_ret.replace('yy', v_yy);
v_ret = v_ret.replace('mm', v_mm);
v_ret = v_ret.replace('dd', v_dd);
return v_ret;
}
/* yyyymmdd, yyyy-mm-dd, yyyy.mm.dd 를 javascript 날짜형 변수로 변환 */
function makeDateFormat(pdate) {
var yy, mm, dd, yymmdd;
var ar;
if (pdate.indexOf(".") > -1) { // yyyy-mm-dd
ar = pdate.split(".");
yy = ar[0];
mm = ar[1];
dd = ar[2];
if (mm < 10) mm = "0" + mm;
if (dd < 10) dd = "0" + dd;
} else if (pdate.indexOf("-") > -1) {// yyyy.mm.dd
ar = pdate.split("-");
yy = ar[0];
mm = ar[1];
dd = ar[2];
if (mm < 10) mm = "0" + mm;
if (dd < 10) dd = "0" + dd;
} else if (pdate.length == 8) {
yy = pdate.substr(0,4);
mm = pdate.substr(4,2);
dd = pdate.substr(6,2);
}
yymmdd = yy+"/"+mm+"/"+dd;
yymmdd = new Date(yymmdd);
if (isNaN(yymmdd)) {
//alert("날짜 형식이 올바르지 않습니다.");
return false;
}
return yymmdd;
}
/*
오라클의 개월수 더하는 함수와 동일
ex) add_month('2008.04.04',10);
*/
function add_months(pdate, diff_m) {
var add_m;
var lastDay; // 마지막 날(30,31..)
var pyear, pmonth, pday;
pdate = makeDateFormat(pdate); // javascript 날짜형변수로 변환
if (pdate == "") return "";
pyear = pdate.getYear();
pmonth= pdate.getMonth() + 1;
pday = pdate.getDate();
add_m = new Date(pyear, pmonth + diff_m, 1); // 더해진 달의 첫날로 셋팅
lastDay = new Date(pyear, pmonth, 0).getDate(); // 현재월의 마지막 날짜를 가져온다.
if (lastDay == pday) { // 현재월의 마지막 일자라면 더해진 월도 마지막 일자로
pday = new Date(add_m.getYear(), add_m.getMonth(), 0).getDate();
}
add_m = new Date(add_m.getYear(), add_m.getMonth()-1, pday);
return add_m;
}
/*
오라클의 개월수 차이 구하는 함수와 동일
ex) months_between('20080404','2006-01-01');
*/
function months_between(edate, sdate) {
var syear, smonth, sday;
var eyear, emonth, eday;
var diff_month = 1;
sdate = makeDateFormat(sdate); // javascript 날짜형변수로 변환
edate = makeDateFormat(edate); // javascript 날짜형변수로 변환
if (sdate == "") return "";
if (edate == "") return "";
syear = sdate.getYear();
eyear = edate.getYear();
smonth= sdate.getMonth() + 1;
emonth= edate.getMonth() + 1;
sday = sdate.getDate();
eday = edate.getDate();
while (sdate < edate) { // 한달씩 더해서 몇개월 차이 생기는지 검사
sdate = new Date(syear, smonth - 1 + diff_month, 0);
diff_month++;
}
if (sday > eday) diff_month--;
diff_month = diff_month - 2;
return diff_month;
}
두 기간 이 몇년, 몇개월, 몇일 차이 인지 계산
c_sta_ymd : 시작날짜
c_end_ymd : 종료날짜
c_gubun : 반환받을 날짜 포맷 ex) yy-mm-dd, mm-dd, dd ...
c_sta_yn : 시작일도 포함할지 여부
ex) f_sys_between_ymd(sta_date, end_date, 'yy-mm-dd','y')
*/
function f_sys_between_ymd(c_sta_ymd, c_end_ymd, c_gubun, c_sta_yn) {
var v_sta_ymd, v_end_ymd;
var v_yy, v_mm, v_dd;
var v_yy_t, v_mm_t, v_mm_mod, v_dd_t, v_dd_y_mod, v_mdd_m_mod;
var v_yy_pos, v_mm_pos, v_dd_pos;
var day_value = 24*60*60*1000;
var v_ret = c_gubun;
if (c_sta_ymd == "" || c_end_ymd == "") {
return "";
}
v_sta_ymd = makeDateFormat(c_sta_ymd); // javascript 날짜형변수로 변환
v_end_ymd = makeDateFormat(c_end_ymd); // javascript 날짜형변수로 변환
if (v_sta_ymd == "") return "";
if (v_end_ymd == "") return "";
if (c_sta_yn.toUpperCase() == "Y") {
v_sta_ymd = new Date(v_sta_ymd.getYear(), v_sta_ymd.getMonth(), v_sta_ymd.getDate()-1);
}
v_yy_t = parseInt(months_between(c_end_ymd, c_sta_ymd)/12); // 월 기간 계산
v_mm_t = parseInt(months_between(c_end_ymd, c_sta_ymd)); // 년도 기간 계산
v_mm_mod = parseInt(months_between(c_end_ymd, c_sta_ymd))%12; // 년도 제외한 월 기간 계산
v_dd_t = parseInt((v_end_ymd - v_sta_ymd)/day_value); // 일자 기간 계산
v_dd_y_mod = parseInt((v_end_ymd - add_months(c_sta_ymd, v_yy_t * 12))/day_value); // 년도 제외한 일자 기간 계산
v_dd_m_mod = parseInt((v_end_ymd - add_months(c_sta_ymd, (v_yy_t * 12) + v_mm_mod))/day_value); // 년월 제외한 일자기간 계산
v_yy_pos = c_gubun.indexOf('yy'.toLowerCase(),0); // 년도 구분자 위치 검색
v_mm_pos = c_gubun.indexOf('mm'.toLowerCase(),0); // 월 구분자 위치 검색
v_dd_pos = c_gubun.indexOf('dd'.toLowerCase(),0); // 일자 구분자 위치 검색
if (v_yy_pos > -1 && v_mm_pos > -1 && v_dd_pos > -1) { // yy년 mm월 dd일 형태
v_yy = v_yy_t;
v_mm = v_mm_mod;
v_dd = v_dd_m_mod;
} else if (v_yy_pos > -1 && v_mm_pos > -1 && v_dd_pos == -1) { // yy년 mm월 형태
v_yy = v_yy_t;
v_mm = v_mm_mod;
} else if (v_yy_pos > -1 && v_mm_pos == -1 && v_dd_pos > 0) { // yy년 dd일 형태
v_yy = v_yy_t;
v_dd = v_dd_y_mod;
} else if (v_yy_pos > -1 && v_mm_pos == -1 && v_dd_pos == -1) { // yy년 형태
v_yy = v_yy_t;
} else if (v_yy_pos == -1 && v_mm_pos > -1 && v_dd_pos > -1) { // mm월 dd일 형태
v_mm = v_mm_t;
v_dd = v_dd_m_mod;
} else if (v_yy_pos == -1 && v_mm_pos == -1 && v_dd_pos > -1) { // dd일 형태
v_dd = v_dd_t;
} else if (v_yy_pos == -1 && v_mm_pos > -1 && v_dd_pos == -1) { // mm월 형태
v_mm = v_mm_t;
}
if (v_mm < 10) v_mm = "0" + v_mm;
if (v_dd < 10) v_dd = "0" + v_dd;
//년,월,일 해당 내용 변환
v_ret = v_ret.replace('yy', v_yy);
v_ret = v_ret.replace('mm', v_mm);
v_ret = v_ret.replace('dd', v_dd);
return v_ret;
}
/* yyyymmdd, yyyy-mm-dd, yyyy.mm.dd 를 javascript 날짜형 변수로 변환 */
function makeDateFormat(pdate) {
var yy, mm, dd, yymmdd;
var ar;
if (pdate.indexOf(".") > -1) { // yyyy-mm-dd
ar = pdate.split(".");
yy = ar[0];
mm = ar[1];
dd = ar[2];
if (mm < 10) mm = "0" + mm;
if (dd < 10) dd = "0" + dd;
} else if (pdate.indexOf("-") > -1) {// yyyy.mm.dd
ar = pdate.split("-");
yy = ar[0];
mm = ar[1];
dd = ar[2];
if (mm < 10) mm = "0" + mm;
if (dd < 10) dd = "0" + dd;
} else if (pdate.length == 8) {
yy = pdate.substr(0,4);
mm = pdate.substr(4,2);
dd = pdate.substr(6,2);
}
yymmdd = yy+"/"+mm+"/"+dd;
yymmdd = new Date(yymmdd);
if (isNaN(yymmdd)) {
//alert("날짜 형식이 올바르지 않습니다.");
return false;
}
return yymmdd;
}
/*
오라클의 개월수 더하는 함수와 동일
ex) add_month('2008.04.04',10);
*/
function add_months(pdate, diff_m) {
var add_m;
var lastDay; // 마지막 날(30,31..)
var pyear, pmonth, pday;
pdate = makeDateFormat(pdate); // javascript 날짜형변수로 변환
if (pdate == "") return "";
pyear = pdate.getYear();
pmonth= pdate.getMonth() + 1;
pday = pdate.getDate();
add_m = new Date(pyear, pmonth + diff_m, 1); // 더해진 달의 첫날로 셋팅
lastDay = new Date(pyear, pmonth, 0).getDate(); // 현재월의 마지막 날짜를 가져온다.
if (lastDay == pday) { // 현재월의 마지막 일자라면 더해진 월도 마지막 일자로
pday = new Date(add_m.getYear(), add_m.getMonth(), 0).getDate();
}
add_m = new Date(add_m.getYear(), add_m.getMonth()-1, pday);
return add_m;
}
/*
오라클의 개월수 차이 구하는 함수와 동일
ex) months_between('20080404','2006-01-01');
*/
function months_between(edate, sdate) {
var syear, smonth, sday;
var eyear, emonth, eday;
var diff_month = 1;
sdate = makeDateFormat(sdate); // javascript 날짜형변수로 변환
edate = makeDateFormat(edate); // javascript 날짜형변수로 변환
if (sdate == "") return "";
if (edate == "") return "";
syear = sdate.getYear();
eyear = edate.getYear();
smonth= sdate.getMonth() + 1;
emonth= edate.getMonth() + 1;
sday = sdate.getDate();
eday = edate.getDate();
while (sdate < edate) { // 한달씩 더해서 몇개월 차이 생기는지 검사
sdate = new Date(syear, smonth - 1 + diff_month, 0);
diff_month++;
}
if (sday > eday) diff_month--;
diff_month = diff_month - 2;
return diff_month;
}
728x90
'Carpe Programming > javascript' 카테고리의 다른 글
[javascript] Event.KeyCode (0) | 2012.03.28 |
---|---|
Jquery SELECT 태그 관련 내용 (0) | 2012.03.22 |
[jQuery] tablesorter (1) | 2012.03.19 |
[javascript ]세로 스크롤 제거 (0) | 2011.11.23 |
[tooltip]본문미리보기_마우스따라다님 (0) | 2011.11.16 |