var oObjDate = null; var oObjForm = null; var oPopup = window.createPopup(); // 팝업 윈도우를 선언한다. var chkHoli = false; var monDays = "31;28;31;30;31;30;31;31;30;31;30;31;".split(";"); // 입력된 일자 Data의 형식을 검사한다. function appCheckData( arg ) { var date = arg.split("-"); if( arg == "" ) { return true; } else if( arg.indexOf(" ") != -1 || date.length != 3 ) { // 년.월.일 형식이 맞는지 검사 alert("YYYY-MM-DD 형식으로 넣어주세요"); oObjDate.focus(); return false; } else { // year check if( date[0].length != 4 ) { alert("연도 정보가 잘못 입력되었습니다."); oObjDate.focus(); return false; } // month check if( date[1].length != 2 || new Number(date[1]) > 12 || new Number(date[1]) < 1 ) { alert("월 정보가 잘못 입력되었습니다."); oObjDate.focus(); return false; } // day check var lastDay; // 월별 마지막 날짜를 얻는다. if( date[1] == "02" ) lastDay = getFebLength( date[0] ); else lastDay = parseInt(monDays[ date[0] - 1 ]); // 일자가 마지막 날짜를 넘었는지 확인한다. if( date[2].length != 2 || new Number(date[2]) > lastDay ) { alert("일 정보가 잘 못 되었습니다."); oObjDate.focus(); return false; } return true; } } // 윤달 여부를 계산한다. function getFebLength(theYear) { theYear = (theYear < 1900) ? theYear + 1900 : theYear; if( ( theYear % 4 == 0 && theYear % 100 != 0 ) || theYear % 400 == 0 ) { return 29; } return 28; } // 해당 연도의 첫째 요일을 구한다. function getFirstDay(theYear){ var firstDate = new Date(theYear,this.offset,1); return firstDate.getDay(); } // 월, 일 정보가 한자리인경우 앞에 '0'을 붙인다. function setCalendarZero(sVal) { sVal = sVal.toString(); if( sVal.length == 1 ) { return sVal = "0" + sVal; } else { return sVal = sVal; } } // 달력을 그려 준다. function reDrawCalendar(sDate) { var tDate = sDate; var nLoop = 0; var oObj = tblDayList.rows; var nLastDay = parseInt(monDays[ sDate.substring(4,6) - 1 ]); if( sDate.substring(4, 6) == "02" ) { nLastDay = getFebLength(sDate.substring(0,4)); } nowYear.innerHTML = sDate.substring(0,4); nowMonth.innerHTML = sDate.substring(4,6); var anchorDay = new Date(sDate.substring(0,4) + "/" + sDate.substring(4,6) + "/01"); var firstDay = anchorDay.getDay(); var nRoop = 0; // 주 정보 var nCoop = 0; // 요일 정보 var nChk = parseInt(sDate.substring(6,8)); // 현재 일자 var sTblList = ""; var activeHeight = "24px"; var loopCount = 5; /////////////////////////////////////////////////////// // 요일에 따라 Loop의 회수를 구한다. /////////////////////////////////////////////////////// if( ( firstDay > 4 && nLastDay > 30 ) || ( firstDay > 5 && nLastDay > 29 ) ) { activeHeight = "20px"; loopCount = 6; } for ( nRoop = 0; nRoop < loopCount; nRoop++ ) { sTblList = sTblList + ""; for( nCoop = 0; nCoop < 7; nCoop++ ) { absDay = nRoop * 7 + nCoop; // 첫주의 이전달이거나 마지막주의 다음달 정보인 경우 if( ( absDay < firstDay ) || ( absDay >= ( nLastDay + firstDay ) ) ) { if( nCoop == 0 ) { sTblList = sTblList + ""; } else if( nCoop == 6 ) { sTblList = sTblList + ""; } else { sTblList = sTblList + ""; } } else { // 일자 정보 출력 prnDay = absDay - firstDay + 1; if( nChk == prnDay ) { // 선택된 일자인 경우 if( nCoop == 0 ) { sTblList = sTblList + ""; } else if( nCoop == 6 ) { sTblList = sTblList + ""; } else { sTblList = sTblList + ""; } } else { if( nCoop == 0 ) { sTblList = sTblList + ""; } else if( nCoop == 6 ) { sTblList = sTblList + ""; } else { sTblList = sTblList + ""; } } } } sTblList = sTblList + ""; } divDayList.innerHTML = sTblList + "
   " + prnDay + "" + prnDay + "" + prnDay + "" + prnDay + "" + prnDay + "" + prnDay + "
"; } // 월 정보가 바뀌는 경우 달력을 다시 그린다. function resetMonth(oYear, oMonth, odivDay, nMonth) { var anchorDay = new Date(oYear.innerHTML + "/" + oMonth.innerHTML + "/01"); anchorDay.setMonth(anchorDay.getMonth() + nMonth); var sDate = anchorDay.getFullYear() + setCalendarZero(anchorDay.getMonth() + 1) + setCalendarZero(anchorDay.getDate()); var nLastDay = parseInt(monDays[ sDate.substring(4,6) - 1 ]); if( sDate.substring(4, 6) == "02" ) { nLastDay = getFebLength(sDate.substring(0,4)); } oYear.innerHTML = sDate.substring(0,4); oMonth.innerHTML = sDate.substring(4,6); var anchorDay = new Date(sDate.substring(0,4) + "/" + sDate.substring(4,6) + "/01"); var firstDay = anchorDay.getDay(); var nRoop = 0; var nCoop = 0; var nChk = parseInt(oObjDate.value.substring(8, 10)); if( nChk > nLastDay ) nChk = nLastDay; var sTmp = sDate.substring(0,4) + "-" + sDate.substring(4,6) + "-" + nChk; if( sTmp.length == 9 ) sTmp = oYear.innerHTML + "-" + oMonth.innerHTML + "-" + "0" + nChk; //oObjDate.value = sTmp; var sTblList = ""; var activeHeight = "24px"; var loopCount = 5; if( ( firstDay > 4 && nLastDay > 30 ) || ( firstDay > 5 && nLastDay > 29 ) ) { activeHeight = "20px"; loopCount = 6; } for( nRoop = 0; nRoop < loopCount; nRoop++ ) { sTblList = sTblList + ""; for( nCoop = 0; nCoop < 7; nCoop++ ) { absDay = nRoop * 7 + nCoop; if( ( absDay < firstDay ) || ( absDay >= ( nLastDay + firstDay ) ) ) { if( nCoop == 0 ) { sTblList = sTblList + ""; } else if( nCoop == 6 ) { sTblList = sTblList + ""; } else { sTblList = sTblList + ""; } } else { prnDay = absDay - firstDay + 1; if( nChk == prnDay ) { if( nCoop == 0 ) { sTblList = sTblList + ""; } else if( nCoop == 6 ) { sTblList = sTblList + ""; } else { sTblList = sTblList + ""; } } else { if( nCoop == 0 ) { sTblList = sTblList + ""; } else if( nCoop == 6 ) { sTblList = sTblList + ""; } else { sTblList = sTblList + ""; } } } } sTblList = sTblList + ""; } odivDay.innerHTML = sTblList + "
   " + prnDay + "" + prnDay + "" + prnDay + "" + prnDay + "" + prnDay + "" + prnDay + "
"; } //오늘날짜 function toDate(){ var now = new Date(); var year = now.getYear(); var month = now.getMonth()+ 1; var day = now.getDate(); if(month < 10){ month = "0" + month; } if(day < 10){ day = "0" + day; } return year +"-"+ month +"-"+ day; } // 화면에 달력을 출력한다. function showCalendar(oMyform, oDate, oObj, nX, nY) { var objDate = null; if(document.getElementById(oDate)!=null) { objDate = document.getElementById(oDate); } else { objDate = eval(oDate); } var curCalDate = ""; oObjDate = objDate; if( appCheckData(objDate.value) == false ) // Date 정보를 검사한다. return; var oPopupBody = oPopup.document.body; // 팝업 윈도우의 body객체 if( objDate.value == "") { curCalDate = toDate(); //objDate.value = curCalDate ; }else { curCalDate = objDate.value; } var date = curCalDate.split("-"); reDrawCalendar(date[0] + date[1] + date[2]); // 달력을 그린다. oPopupBody.innerHTML = divCalendar.innerHTML; // 그려진 달력을 팝업 윈도우에 삽입한다. oPopup.show(nX - 156, nY + 9, 169, 167, oObj); // 팝업 윈도우를 화면에 출력한다. } function selDay(oYear, oMon, sDay) { // 년,월,일 정보를 yyyy.mm.dd 포멧으로 변경한다. var sTmp = oYear.innerHTML + "-" + oMon.innerHTML + "-" + sDay; if( sTmp.length == 9 ) sTmp = oYear.innerHTML + "-" + oMon.innerHTML + "-" + "0" + sDay oObjDate.value = sTmp; // 선택된 일 정보를 해당 일자 필드에 적용한다. oObjDate.focus(); oPopup.hide(); // 달력을 숨긴다. } function dtDataChk( frmDate, chk ) { var dtObj if( (dtObj = eval("frm." + frmDate) ) != null ) { sVal = dtObj.value; if (sVal.length < 8) { alert('날짜확인'); window.event.cancelBubble = true; dtObj.focus(); return false; } if (sVal.substr(4, 1) != '-') { sVal = sVal.substr(0, 4) + '-' + sVal.substr(4, sVal.length) } if (sVal.substr(7, 1) != '-') { sVal = sVal.substr(0, 7) + '-' + sVal.substr(sVal.length - 2, 2) } if (sVal.length != 10) { alert('날짜확인'); window.event.cancelBubble = true; dtObj.focus(); return false; } if( sVal.substr(5, 2) < 1 || sVal.substr(5, 2) > 12 ) { alert('월 정보를 잘 못 입력하셨습니다.'); window.event.cancelBubble = true; dtObj.focus(); return false; } if( sVal.substr(8, 2) < 1 || sVal.substr(8, 2) > 31 ) { alert('일 정보를 잘 못 입력하셨습니다.'); window.event.cancelBubble = true; dtObj.focus(); return false; } for (nLoc = 0; nLoc < sVal.length ;nLoc++ ) { if (sVal.substr(nLoc, 1) == '-') { if (!((nLoc == 4) || (nLoc == 7))) { alert("날짜확인"); window.event.cancelBubble = true; dtObj.focus(); return false; } } } // day check var lastDay; var dayValue = sVal.substr(8, 2); var monValue = sVal.substr(5, 2); var yearValue = sVal.substr(0, 4); // 월별 마지막 날짜를 얻는다. if( monValue == "02" ) lastDay = getFebLength( yearValue ); else lastDay = parseInt(monDays[ yearValue - 1 ]); // 일자가 마지막 날짜를 넘었는지 확인한다. if( dayValue.length != 2 || new Number(dayValue) > lastDay ) { //alert("일 정보가 잘 못 되었습니다."); dtObj.focus(); return false; } dtObj.value = sVal; if( chk != true ) { var dateObj = eval("frm." + chk); if( !chkFromTo( dtObj, dateObj ) ) { //alert("시작일과 종료일이 잘 못 설정되었습니다"); return false; } } return true; } return false; } function callCalendar(frmDate) { var dtObj = null; if( (dtObj = frmDate ) != null ) { showCalendar(frm, dtObj, document.body, event.x, event.y ); } } // 기간인 경우 From - To의 일자가 바뀌는것을 확인한다. function chkFromTo( date1, date2 ) { var fDate = date1.value.split("-"); var tDate = date2.value.split("-"); var date11 = fDate[0] + fDate[1] + fDate[2]; var date22 = tDate[0] + tDate[1] + tDate[2]; if( eval(date22 - date11) < 0 ) { date2.focus(); return false; } return true; } /////////////////////////////////////////////////////////////////////////////// // 함수명 : SubtractDate(strBaseDate, interval) // 내 용 : 기준일(strBaseDate)로 부터 n(interval)일 이전의 날짜 추출 // strBaseDate Format : YYYYMMDD // Return Value Format : YYYYMMDD function SubtractDate(strBaseDate, interval) { var year = strBaseDate.substring( 0, 4 ); var month = parseInt(strBaseDate.substring( 4, 6 )) - 1; var day = strBaseDate.substring( 6, 8 ); var todate = new Date(year,month,day); var date = new Date(); date.setTime(todate.getTime() - (1000 * 60 * 60 * 24 * interval)); yyyy = date.getFullYear().toString(); mm = (parseInt(date.getMonth()) + 1).toString(); dd = date.getDate().toString(); yyyy = (yyyy.length ==1) ? '0'+yyyy : yyyy; mm = (mm.length == 1) ? '0'+mm : mm; dd = (dd.length == 1) ? '0'+dd : dd; return yyyy+mm+dd; } /////////////////////////////////////////////////////////////////////////////// // 함수명 : CheckInterval(strBaseDate, interval) // 내 용 : strBaseDate가 현재 시점부터 n(interval)일 사이에 존재하는가를 검사 // strBaseDate Format : YYYYMMDD // Return Value Format : YYYYMMDD // n일 이내에 있으면 true // n일을 벗어나 있으면 false function CheckInterval(strBaseDate, interval) { var year = parseInt(strBaseDate.substring( 0, 4 )); var month = parseInt(strBaseDate.substring( 4, 6 )) - 1; var day = parseInt(strBaseDate.substring( 6, 8 )); var baseDate = new Date(year,month,day); var nowDate = new Date(); var days_interval = nowDate.getTime() - baseDate.getTime(); var days = Math.floor(days_interval / (1000 * 60 * 60 * 24)); if (days > interval) { return false; } else { return true; } }