//-------------------------------------------------------------------------------------------------- // 달력호출 프로그램 //-------------------------------------------------------------------------------------------------- nombresMonth = Array("","1월","2월","3월","4월","5월","6월","7월","8월","9월","10월","11월","12월"); var minYear = 1990; var maxYear = 2020; var year; var month; var day; var dateObj; var dateTitle; var separator =""; // 해당월에 들어있는 날짜수를 리턴 function daysOfMonth(year,month) { if ((month==1)||(month==3)||(month==5)||(month==7)||(month==8)||(month==10)||(month==12)) days=31 else if ((month==4)||(month==6)||(month==9)||(month==11)) days=30 else if ((((year % 100)==0) && ((year % 400)==0)) || (((year % 100)!=0) && ((year % 4)==0))) days = 29 else days = 28; return days; }; // 월에 대한 selectBox를 생성 function makeMonths(curMonth) { var selectorMonth = ""; selectorMonth = "" + ""; selectorMonth = selectorMonth + "\r\n"; return selectorMonth; } function goPreMonth(){ if(Number(self.document.form1.month[self.document.form1.month.selectedIndex].value)-1 < 1) return; createCal(self.document.form1.year[self.document.form1.year.selectedIndex].value, Number(self.document.form1.month[self.document.form1.month.selectedIndex].value)-1, day); } function goNextMonth(){ if(Number(self.document.form1.month[self.document.form1.month.selectedIndex].value)+1 > 12) return; createCal(self.document.form1.year[self.document.form1.year.selectedIndex].value, Number(self.document.form1.month[self.document.form1.month.selectedIndex].value)+1, day); } function goChangeMonthLeftOver(obj){ obj.src = "../../images/common/page_ar_q_1a.gif"; } function goChangeMonthLeftOut(obj){ obj.src = "../../images/common/page_ar_q_1b.gif"; } function goChangeMonthRightOver(obj){ obj.src = "../../images/common/page_ar_q_2a.gif"; } function goChangeMonthRightOut(obj){ obj.src = "../../images/common/page_ar_q_2b.gif"; } // 연도에 대한 selectBox를 생성 function makeYears(curYear) { var selectorYear = ""; var onmouseover = ""; var onmouseout = ""; selectorYear = "" + ""; selectorYear = selectorYear + ""; return selectorYear; } function goPreYear(){ if(Number(self.document.form1.year[self.document.form1.year.selectedIndex].value)-1 < minYear) return; createCal(Number(self.document.form1.year[self.document.form1.year.selectedIndex].value)-1, self.document.form1.month[self.document.form1.month.selectedIndex].value, day); } function goNextYear(){ if(Number(self.document.form1.year[self.document.form1.year.selectedIndex].value)+1 > maxYear) return; createCal(Number(self.document.form1.year[self.document.form1.year.selectedIndex].value)+1, self.document.form1.month[self.document.form1.month.selectedIndex].value, day); } function goChangeYearLeftOver(obj){ obj.src = "../../images/common/page_ar_q_1a.gif"; } function goChangeYearLeftOut(obj){ obj.src = "../../images/common/page_ar_q_1b.gif"; } function goChangeYearRightOver(obj){ obj.src = "../../images/common/page_ar_q_2a.gif"; } function goChangeYearRightOut(obj){ obj.src = "../../images/common/page_ar_q_2b.gif"; } // 연월이 바뀔 경우 해당 달력을 remake function makeCalDesc(year,month) { var caldesc = "\r\n" + "\r\n"; var baseDate = new Date(); var i = 0; var row = 1; var col = 0; var temp; var strtemp; baseDate.setYear(year); baseDate.setMonth(month-1); alert(day); baseDate.setDate(day); var startingPos = baseDate.getDay(); var days = startingPos + daysOfMonth(year, month); caldesc = caldesc + "\r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + " \r\n" + "\r\n"; for (row = 1 ; row < 7 ; row++) { caldesc = caldesc + "\n"; for (col = 0; col < 7 ; col++) { temp = i - startingPos + 1; if ((temp == nowDay()) && (month == nowMonth()) && (year == nowYear())) { caldesc = caldesc + "\n"; } caldesc = caldesc + "\n"; } caldesc = caldesc + "
"; } else { caldesc = caldesc + ""; } if ( i < startingPos ) caldesc = caldesc + " "; else if ( i < days ) { strtemp = makeVal(year, month, temp); caldesc = caldesc + "" + temp + ""; } else caldesc = caldesc + " "; i++; caldesc = caldesc + "
\r\n"; return caldesc; } function makeCalDesc(year,month,arg_date) { var caldesc = "\r\n" + " \r\n"; var baseDate = new Date(); var i = 0; var row = 1; var col = 0; var temp; var strtemp; baseDate.setYear(year); baseDate.setMonth(month-1); baseDate.setDate(1); var startingPos = baseDate.getDay(); var days = startingPos + daysOfMonth(year, month); caldesc = caldesc + " \r\n"; for (row = 1 ; row < 7 ; row++) { caldesc = caldesc + "\n"; for (col = 0; col < 7 ; col++) { temp = i - startingPos + 1; //if ((temp == nowDay()) && (month == nowMonth()) && (year == nowYear())) { if ((temp == arg_date) && (month == month) && (year == year)) { if ( i < startingPos ) { caldesc = caldesc + "\n"; } caldesc = caldesc + "\n"; } caldesc = caldesc + "
일\r\n" + " 월\r\n" + " 화\r\n" + " 수\r\n" + " 목\r\n" + " 금\r\n" + " 토\r\n" + "
"; } else if ( i < days ) { strtemp = makeVal(year, month, temp); caldesc = caldesc + ""; } else { caldesc = caldesc + ""; } }else { if ( i < startingPos ) { caldesc = caldesc + ""; } else if ( i < days ) { strtemp = makeVal(year, month, temp); caldesc = caldesc + ""; } else { caldesc = caldesc + ""; } } if ( i < startingPos ) { caldesc = caldesc + " "; } else if ( i < days ) { strtemp = makeVal(year, month, temp); caldesc = caldesc + ""; // 일요일일때 체크하여 색상 바꿈 if( col== 0) { caldesc = caldesc + ""; // 토요일일때 체크하여 색상 바꿈 }else if(col == 6) { caldesc = caldesc + ""; }else{ caldesc = caldesc + ""; } caldesc = caldesc + + temp + ""; } else { caldesc = caldesc + " "; } i++; caldesc = caldesc + "
\r\n"; return caldesc; } // 전체 달력을 새로 생성 function call_cal(year, month, dateTitle) { var winopt = "status=no,width=220,height=255,left=100,top=200"; calwin = window.open("./jsp/com/calendar.jsp?p_year="+year+"&p_month="+month+"&p_dateTitle="+dateTitle,"calwin",winopt); } function call_cal(year, month, date, dateTitle) { var winopt = "status=no,width=250,height=265,left=100,top=200"; calwin = window.open("./jsp/com/calendar.jsp?p_year="+year+"&p_month="+month+"&p_day="+date+"&p_dateTitle="+dateTitle,"calwin",winopt); } function createCal(year, month) { var html = "
\r\n" + "
\r\n
\r\n"; html = html + makeYears(year); html = html + makeMonths(month); html = html + "
\r\n
\r\n"; html = html + makeCalDesc(year,month); html = html + "
\r\n" + "\r\n " + " \r\n " + " \r\n " + " \r\n " + " \r\n " + " \r\n " + "
\r\n " + " I CLOSE I\r\n " + "
\r\n " + "
\r\n " idCal.innerHTML = html } function createCal(year, month, date) { day = date var html = "
\r\n" + "
\r\n" + "
\r\n"; html = html + makeYears(year); html = html + makeMonths(month); html = html + "
\r\n"+ "
\r\n"; html = html + makeCalDesc(year,month,date); html = html + "
\r\n" + "\r\n " + " \r\n " + " \r\n " + " \r\n " + " \r\n " + " \r\n " + "
\r\n " + " \r\n " + "
\r\n " + "
\r\n " idCal.innerHTML = html } // 현재연도를 리턴 function nowYear() { var today = new Date(); if (navigator.appName == "Netscape") return today.getYear() + 1980 else return today.getYear(); } // 현재 월을 리턴 function nowMonth() { var today = new Date(); return today.getMonth()+1; } // 현재 일자를 리턴 function nowDay() { var today = new Date(); return today.getDate(); } // 2글자로 만들어줌. function makeVal(inYear,inMonth,inDay) { var tmp; var year = String(inYear); var month = String(inMonth); var day = String(inDay); if (day != " ") { if (month.length < 2) { month = "0" + month; } if (day.length < 2) { day = "0" + day; } tmp = year + month + day; return (tmp); } } // 날짜를 클릭하면 해당일자를 YYYY/MM/DD 포맷으로 리턴한다. function returnDate(inRetVal) { var val = inRetVal.substring(0,4) + separator + inRetVal.substring(4,6) + separator + inRetVal.substring(6,8); dateObj.value = val; if (separator != "-") dateObj.focus(); } //-------------------------------------------------------------------------------------------------- // Client에서 달력을 부르고 싶을 경우 // onclick = showcal(date-input, 달력타이틀, separator) // "/"사용여부 (1=사용, null=미사용) //-------------------------------------------------------------------------------------------------- function showcal(obj, caltitle, sepon) { //alert(obj.value); // 실제 존재하는 object인지를 체크 try { var val = obj.value; } catch(e) { alert(e + "\n일자입력 오브젝트가 잘못 지정되었습니다.\n개발자에게 문의바랍니다."); return; } if(obj.value == ""){ year = nowYear(); month = nowMonth(); day = nowDay(); }else{ year = Number(obj.value.substring(0,4) ); month = Number(obj.value.substring(5,7) ); day = Number(obj.value.substring(8,10)); } dateObj = obj; if (caltitle == null || caltitle == "") dateTitle = "날짜선택" else dateTitle = caltitle; if (sepon == null) separator = ""; else if (sepon == 1) separator = "-"; else if (sepon == 2) separator = "."; else separator = ""; call_cal(year,month,day,dateTitle); } //-------------------------------------------------------------------------------------------------- // 일자조작 프로그램 //-------------------------------------------------------------------------------------------------- // isDate : 내부사용함수 (Client에서는 밑에 chkDate함수를 사용. // 날짜값이 맞는지 체크한다. function isDate(dateVal) { if (dateVal.length == 0) return true; var year = dateVal.substring(0,4); var month = dateVal.substring(5,7); var day = dateVal.substring(8,10); if (dateVal.length < 10 ) { alert("YYYYMMDD의 입력형식을 확인하십시요."); return false; } for (var i = 0; i < year.length; i++) { if (year.charAt(i) < "0" || year.charAt(i) > "9") { alert("입력오류 : 문자, 특수문자, 공백문자를 입력하여서는 않됩니다."); return false; } } if (year < 1) { alert("입력오류 : 년도는 1 이상의 수를 입력하여야 합니다."); return false; } for (i = 0; i < month.length; i++) { if (month.charAt(i) < "0" || month.charAt(i) > "9") { alert("입력오류 : 문자, 특수문자, 공백문자를 입력하여서는 않됩니다."); return false; } } if (month > 12 || month < 1) { alert("입력오류 : 달은 1월에서 12월 사이를 입력하여야 합니다."); return false; } for (i = 0; i < day.length; i++) { if (day.charAt(i) < "0" || day.charAt(i) > "9") { alert("입력오류 : 문자, 특수문자, 공백문자를 입력하여서는 않됩니다."); return false; } } if (((month == 1) || (month == 3) || (month == 5) || (month == 7) || (month == 8) || (month == 10) || (month == 12)) && (day < 1 || day > 31)) { alert("입력오류 : 입력월이 1, 3, 5, 7, 8, 10, 12월일 경우 일수는 1에서 31 사이를 입력하여야 합니다."); return false; } if (((month == 4) || (month == 6) || (month == 9) || (month == 11)) && (day < 1 || day > 30)) { alert("입력오류 : 입력월이 4, 6, 9, 11월일 경우 일수는 1에서 30 사이를 입력하여야 합니다."); return false; } if (month == 2) { if (!(year%4) && (day < 1 || day > 29)) { alert("입력오류 : 윤년, 윤달일 경우 일수는 1에서 29 사이를 입력하여야 합니다."); return false; } else if ((year%4) && (day < 1 || day > 28)) { alert("입력오류 : 평년, 2월일 경우 일수는 1에서 28 사이를 입력하여야 합니다."); return false; } } return true; } //-------------------------------------------------------------------------------------------------- // chkDate : 외부용 함수. Client에서 사용 (예. = 0 ? 0 : -1) ); } //-------------------------------------------------------------------------------------------------- // 두 날짜의 일수 간격을 구함. //-------------------------------------------------------------------------------------------------- function getDayTerm(obj1, obj2) { var date1 = toTimeObject(obj1.value); var date2 = toTimeObject(obj2.value); var day = 1000 * 3600 * 24; //24시간 return parseInt((date2 - date1) / day, 10); } //-------------------------------------------------------------------------------------------------- // 말일 구하기 //-------------------------------------------------------------------------------------------------- function getEndDay(yyyymmdd){ var yyyy = yyyymmdd.substring(0,4); var mm = yyyymmdd.substring(5,7); var dd = yyyymmdd.substring(8,10); if ( (mm=='01') || (mm=='03') || (mm=='05') || (mm=='07') || (mm=='08') || (mm=='10') || (mm=='12') ) { return yyyy+mm+"31"; }else if( mm=='02') { if ((yyyy%4==0) && ((yyyy/4)%200!=0)) return yyyy+mm+"29"; else return yyyy+mm+"28"; }else { return yyyy+mm+"30"; } } //-------------------------------------------------------------------------------------------------- // Function : 달력을 만든 후에 다른 작업을 더 하기를 원하는 경우 showcal2(~~~~)를 호출하고, // 아래의 메서드에 flag = true로 준 다음에 직접 workItNow()를 스크립트에 // 추가적으로 구현한다.(이것을 적용하기 위해서 전역변수로 workItNowFlag를 만들어서 사용했다.) // 사용자는 showcal2()를 호출하고, workItNow()를 정의해주면 된다. // param : date-input, 달력타이틀, separator "/"사용여부 (1=사용, null=미사용) // Usage : 공통 팝업(날짜 조회 이후 작업 유무) // 수정자 : //-------------------------------------------------------------------------------------------------- var workItNowFlag = false; function showcal2(obj, caltitle, sepon, flag) { workItNowFlag = true; showcal(obj, caltitle, sepon); } function lastWorkOpen99() { if(workItNowFlag) workItNow(); }