/*-------------------------------------------------------------------+ * 1. ÆÄÀϸí: valid.date.js * 2. ¼³ ¸í: ÀÏÀÚ, ½Ã°£¿¡ ´ëÇÑ À¯È¿¼º Á¡°Ë ÇÔ¼ö¸¦ Á¤ÀÇÇÑ´Ù. * 3. ÀÇÁ¸¼º: string.js, date.js * 4. ÀÛ¼ºÀÚ: * 5. ÀÛ¼ºÀÏ: 2006.10.11. -------------------------------------------------------------------*/ /** * ÁÖ¾îÁø ¹®ÀÚ¿­ °ªÀÌ À¯È¿ÇÑ ³¯Â¥ Çü½ÄÀÎÁö¸¦ È®ÀÎÇÏ¿© * À¯È¿Çϸé true¸¦ µ¹·ÁÁÖ°í, À¯È¿ÇÏÁö ¾ÊÀ¸¸é ÀûÀýÇÑ ¿À·ù ¸Þ½ÃÁö¸¦ * º¸¿©ÁØ ´ÙÀ½ false¸¦ µ¹·ÁÁØ´Ù. */ function checkYearMonth(dateStr) { // ¾Æ¹«°ªµµ ¾øÀ¸¸é ÁøÇàÇÏÁö ¾Ê´Â´Ù. if ( trim(dateStr) == "" ) return true; dateStr = removeChar(dateStr, DATE_DELIMETER); // ½½·¡½¬¸¦ Á¦°ÅÇÑ ³ª¸ÓÁö ÀÚ¸´¼ö°¡ 8ÀÚÀÎÁö °Ë»çÇÑ´Ù. if (dateStr.length != 6) { alert("YYYYMMÀÇ Çü½ÄÀ¸·Î ÀÔ·ÂÇØ ÁֽʽÿÀ."); return false; } // ¼ýÀڷθ¸ ±¸¼ºµÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù. if ( isNaN(dateStr) ) { alert("³¯Â¥¿¡´Â ¹®ÀÚ°¡ ÀÔ·ÂµÉ ¼ö ¾ø½À´Ï´Ù."); return false; } // ¿¬µµ 4ÀÚ¸®, ¿ù 2ÀÚ¸®·Î ÀÚ¸¥´Ù. var yearStr = dateStr.substring(0, 4); var monthStr = dateStr.substring(4); // ¿¬µµ °ªÀÌ 1900 ~ 2050 »çÀÌÀÎÁö Á¡°ËÇÑ´Ù. if ( yearStr < 1900 || yearStr > 2050 ) { alert("¿¬µµ´Â 1900³â ~ 2050³â »çÀÌÀÇ °ªÀ» ÀÔ·ÂÇØ¾ß ÇÕ´Ï´Ù."); return false; } // ¿ùÀÌ 1~12¿ù »çÀÌÀÎÁö Á¡°ËÇÑ´Ù. if ( monthStr < 1 || monthStr > 12 ) { alert("¿ùÀº 01¿ù¿¡¼­ 12¿ù »çÀÌÀÇ °ªÀÔ´Ï´Ù."); return false; } return true; } /** * TextÇü ÀÔ·ÂÆûÀÇ ¹®ÀÚ¿­ °ªÀÌ À¯È¿ÇÑ ³¯Â¥ Çü½ÄÀÎÁö¸¦ È®ÀÎÇÏ¿© * À¯È¿ÇÏ¸é ¿¬¿ù °ª »çÀÌ¿¡ ½½·¡½¬(/)¸¦ ³ÖÀº ¹®ÀÚ¿­·Î ¹Ù²Û ÈÄ true¸¦ µ¹·ÁÁÖ°í, * À¯È¿ÇÏÁö ¾ÊÀ¸¸é ÀûÀýÇÑ ¿À·ù ¸Þ½ÃÁö¸¦ º¸¿©ÁØ ´ÙÀ½ false¸¦ µ¹·ÁÁØ´Ù. */ function checkYearMonthObj(obj) { var dateStr = removeChar(obj.value, DATE_DELIMETER); var valid = true; // ºó ¹®ÀÚ¿­À̸é Á¡°ËÇÏÁö ¾Ê´Â´Ù. if ( trim(dateStr) != "" ) { valid = checkYearMonth(dateStr); if ( valid ) { var yearStr = dateStr.substring(0, 4); var monthStr = dateStr.substring(4); obj.value = yearStr + DATE_DELIMETER + monthStr; } else { obj.focus(); } } return valid; } /** * TextÇü ÀÔ·ÂÆû ¿¡ ÀÔ·ÂµÈ ³¯Â¥°¡ À¯È¿ÇÑÁö üũÇÏ¿© * À¯È¿Çϸé YYYY/MM/DDÀÇ ÇüÅ·Πº¯È¯ÇÏ¿© return * Çϰí, À¯È¿ÇÏÁö ¾ÊÀ¸¸é ¿¡·¯¸Þ¼¼Áö º¸¿©ÁÜ * (³â¿ùÀÏ ÀÔ·ÂÇʵåÀÇ onblur event¿¡ »ç¿ëÇÒ°Í) * * @param obj TextÇü ÀÔ·ÂÆû °´Ã¼ */ function checkDateObj(obj) { return checkDate(obj.value); } /** * ÁÖ¾îÁø ¹®ÀÚ¿­°ªÀÌ À¯È¿ÇÑ ³¯Â¥°ªÀÎÁö Á¡°ËÇÏ¿© * À¯È¿Çϸé true¸¦ µ¹·ÁÁÖ°í, À¯È¿ÇÏÁö ¾ÊÀ¸¸é * ¿¡·¯¸Þ¼¼Áö¸¦ º¸¿©ÁÖ°í false¸¦ µ¹·ÁÁØ´Ù. * (³â¿ùÀÏ ÀÔ·ÂÇʵåÀÇ onblur event¿¡ »ç¿ëÇÒ°Í) * * @param dateStr ³¯Â¥Çü°ªÀ» °¡Áö´Â ¹®ÀÚ¿­ */ function checkDate(dateStr, fieldName) { // ¾Æ¹«°ªµµ ¾øÀ¸¸é ÁøÇàÇÏÁö ¾Ê´Â´Ù. if ( trim(dateStr) == "" ) return true; /* Ç׸ñ¸íÀÌ ¾øÀ¸¸é "ÀÏÀÚ"À» »ç¿ë. */ if ( isEmpty(fieldName) ) fieldName = "ÀÏÀÚ"; dateStr = removeChar(dateStr, DATE_DELIMETER); // ¼ýÀڷθ¸ ±¸¼ºµÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù. if ( isNaN(dateStr) ) { alert(fieldName + "ÀÇ °ª¿¡´Â ¹®ÀÚ°¡ ÀÔ·ÂµÉ ¼ö ¾ø½À´Ï´Ù."); return false; } // ±¸º°ÀÚ¸¦ Á¦°ÅÇÑ ³ª¸ÓÁö ÀÚ¸´¼ö°¡ 8ÀÚÀÎÁö °Ë»çÇÑ´Ù. if (dateStr.length != 8) { alert(fieldName + "ÀÇ °ªÀ» YYYYMMDDÀÇ Çü½ÄÀ¸·Î ÀÔ·ÂÇØ ÁֽʽÿÀ."); return false; } // ¿¬µµ 4ÀÚ¸®, ¿ù 2ÀÚ¸®, ÀÏ 2ÀÚ¸®·Î ÀÚ¸¥´Ù. var yearStr = dateStr.substring(0, 4); var monthStr = dateStr.substring(4, 6); var dayStr = dateStr.substring(6); // ¿¬µµ °ªÀÌ 1900 ~ 2050 »çÀÌÀÎÁö Á¡°ËÇÑ´Ù. if ( yearStr < 1900 || yearStr > 2050 ) { alert(fieldName + "ÀÇ ¿¬µµ´Â 1900³â ~ 2050³â »çÀÌÀÇ °ªÀ» ÀÔ·ÂÇØ¾ß ÁֽʽÿÀ."); return false; } // ¿ùÀÌ 1~12¿ù »çÀÌÀÎÁö Á¡°ËÇÑ´Ù. if ( monthStr < 1 || monthStr > 12 ) { alert(fieldName + "ÀÇ ¿ùÀ» 01 ~ 12¿ù »çÀÌÀÇ °ªÀ¸·Î ÀÔ·ÂÇØ ÁֽʽÿÀ."); return false; } // ÀÏÀÚ°¡ ÇØ´ç¿ùÀÇ À¯È¿ÇÑ ÀÏÀÚÀÎÁö °Ë°ËÇÑ´Ù. // Date °´Ã¼ »ý¼º½Ã ³¯Â¥°¡ À¯È¿¹üÀ§¸¦ ³Ñ¾î¼­¸é // ´ÞÀÌ º¯ÇÏ´Â ¿ø¸®¸¦ ÀÌ¿ëÇß´Ù. var date = new Date(yearStr, monthStr - 1, dayStr); if (yearStr != date.getFullYear() || monthStr != (date.getMonth() + 1)) { alert(monthStr + "¿ù¿¡´Â " + dayStr + "ÀÏÀÌ ¾ø½À´Ï´Ù."); return false; } return true; } /** * ÁÖ¾îÁø ÀÏÀÚ°ªÀÌ À¯È¿ÇÑÁö °Ë»çÇÏ¿© À¯È¿Çϸé true, * ¿À·ù ¸Þ¼¼Áö¸¦ º¸¿©ÁÖ°í false¸¦ µ¹·Á ÁØ´Ù. * * @param dateStr ÀÏÀÚÇüÀÇ ¹®ÀÚ¿­. * @param filedName À¯È¿¼ºÀ» °ËÁõÇÏ·Á´Â Ç׸ñ¸í. * @return À¯È¿¿©ºÎ. */ function validateDate(dateStr, fieldName) { return checkDate(dateStr); } /** * ÁÖ¾îÁø °´Ã¼ÀÇ °ªÀÌ À¯È¿ÇÑ ÀÏÀÚÀÎÁö °Ë»çÇÏ¿©, * À¯È¿Çϸé true, ±×·¸Áö ¾ÊÀ¸¸é ¿À·ù ¸Þ¼¼Áö¸¦ º¸¿©ÁÖ°í * false¸¦ µ¹·Á ÁØ´Ù. * * @param obj ÀÏÀÚÇüÀÇ ¹®ÀÚ¿­À» °ªÀ¸·Î °¡Áö´Â °´Ã¼. * @param filedName À¯È¿¼ºÀ» °ËÁõÇÏ·Á´Â Ç׸ñ¸í. * @return À¯È¿¿©ºÎ. */ function validateDateObj(obj, fieldName) { var isValid = validateDate(obj.value, fieldName); if ( ! isValid ) obj.focus(); return isValid; } /** * ÁÖ¾îÁø °´Ã¼ÀÇ °ªÀÌ À¯È¿ÇÑ ÀÏÀÚÀ̸é * °´Ã¼ÀÇ °ªÀ» Çü½ÄÈ­ÇÑ´Ù. */ function formatDateStrObjIfValid(obj, fieldName) { var dateStr = removeChar(obj.value, DATE_DELIMETER); var valid = true; valid = checkDate(dateStr, fieldName); if ( valid ) { formatDateStrObj(obj); } else { obj.focus(); } return valid; } /** * µÎ°³ÀÇ ¿¬¿ù(yyyy/MMÇü½Ä) ¹®ÀÚ¿­À» ºñ±³ÇÏ¿© ¾Õ ¿¬¿ùÀÌ µÚ ¿¬¿ù°ú * °°À¸¸é 0, ¾Õ ¿¬¿ùÀÌ µÚ ¿¬¿ùº¸´Ù ºü¸£¸é 1, ¾Õ ¿¬¿ùÀÌ µÚ ¿¬¿ùº¸´Ù * ´À¸®¸é -1À» µ¹·Á ÁØ´Ù. * * @param yearMonth1 ¾Õ ¿¬¿ù * @param yearMonth2 µÚ ¿¬¿ù */ function compareYearMonth(yearMonth1, yearMonth2) { var result = 0; yearMonth1 = removeChar(yearMonth1, DATE_DELIMETER); yearMonth2 = removeChar(yearMonth2, DATE_DELIMETER); if ( yearMonth1 < yearMonth2 ) { result = 1; } else if ( yearMonth1 > yearMonth2 ) { result = -1; } return result; } /** * µÎ°³ÀÇ TextÇü ÀÔ·ÂÆûÀÇ ¿¬¿ù(yyyy/MMÇü½Ä) ¹®ÀÚ¿­ °ªÀ» ºñ±³ÇÏ¿© * ¾Õ ¿¬¿ùÀÌ µÚ ¿¬¿ù°ú °°À¸¸é 0, ¾Õ ¿¬¿ùÀÌ µÚ ¿¬¿ùº¸´Ù ºü¸£¸é 1, * ¾Õ ¿¬¿ùÀÌ µÚ ¿¬¿ùº¸´Ù ´À¸®¸é -1À» µ¹·Á ÁØ´Ù. * * @param obj1 ¾Õ ¿¬¿ù°ªÀ» °¡Áö´Â TextÇü ÀÔ·ÂÆû * @param obj2 µÚ ¿¬¿ù°ªÀ» °¡Áö´Â TextÇü ÀÔ·ÂÆû */ function compareYearMonthObj(obj1, obj2) { return compareYearMonth(obj1.value, obj2.value); } /** * µÎ°³ÀÇ ³¯Â¥ ¹®ÀÚ¿­À» ºñ±³ÇÏ¿© ù¹øÂ° ÆÄ¶ó¹ÌÅÍ(date1)ÀÇ * ³¯Â¥ °ªÀÌ µÎ¹øÂ° ÆÄ¶ó¹ÌÅÍ(date2)ÀÇ ³¯Â¥ °ª°ú ºñ±³ÇÏ¿© * À̸£¸é 1À», °°À¸¸é 0À», ´ÊÀ¸¸é -1À» µ¹·Á ÁØ´Ù. * date1Àº °ªÀÌ ÀÖ°í, date2´Â °ªÀÌ ¾øÀ¸¸é -1, * date1Àº °ªÀÌ ¾ø°í, date2´Â °ªÀÌ ÀÖÀ¸¸é 1 ÀÌ´Ù. * * @param date1 yyyyMMddÇü½ÄÀÇ ³¯Â¥Çü ¹®ÀÚ¿­. * @param date2 yyyyMMddÇü½ÄÀÇ ³¯Â¥Çü ¹®ÀÚ¿­. */ function compareDate(date1, date2) { date1 = removeChar(date1, DATE_DELIMETER); date2 = removeChar(date2, DATE_DELIMETER); var result = 0; if ( date1 < date2 ) { result = 1; } else if ( date1 > date2 ) { result = -1; } return result; } /** * µÎ°³ÀÇ ³¯Â¥ ¹®ÀÚ¿­À» ºñ±³ÇÏ¿© ù¹øÂ° ÆÄ¶ó¹ÌÅÍ(obj1)ÀÇ * ³¯Â¥ °ªÀÌ µÎ¹øÂ° ÆÄ¶ó¹ÌÅÍ(obj2)ÀÇ ³¯Â¥ °ª°ú ºñ±³ÇÏ¿© * À̸£¸é 1À», °°À¸¸é 0À», ´ÊÀ¸¸é -1À» µ¹·Á ÁØ´Ù. * obj1Àº °ªÀÌ ÀÖ°í, obj2´Â °ªÀÌ ¾øÀ¸¸é -1, * obj1Àº °ªÀÌ ¾ø°í, obj2´Â °ªÀÌ ÀÖÀ¸¸é 1 ÀÌ´Ù. * * @param obj1 TextÇü ÀÔ·ÂÆû °´Ã¼ * @param obj2 TextÇü ÀÔ·ÂÆû °´Ã¼ */ function compareDateObj(obj1, obj2) { return compareDate(obj1.value, obj2.value); } /** * ±â°£À» ³ªÅ¸³»´Â µÎ °³ÀÇ °´Ã¼ÀÇ ÀÏÀÚ°ªÀÇ À¯È¿¼ºÀ» °ËÁõÇÏ¿© * À¯È¿Çϸé true¸¦ µ¹·ÁÁÖ°í, À¯È¿ÇÏÁö ¾ÊÀ¸¸é ¿À·ù¸Þ¼¼Áö¸¦ * º¸¿©ÁØ ´ÙÀ½ false¸¦ µ¹·Á ÁØ´Ù. * * @param rearDateStrObj ¾Õ ÀÏÀÚ ¹®ÀÚ¿­ °ªÀ» °®´Â °´Ã¼. * @param foreDateStrObj µÚ ÀÏÀÚ ¹®ÀÚ¿­ °ªÀ» °®´Â °´Ã¼. * @param fieldName Ç׸ñ¸í. * @param allowSameDate µ¿ÀÏÀÏ Çã¿ë¿©ºÎ. ¾øÀ¸¸é Çã¿ë(true). * @return À¯È¿Çϸé true, ±×·¸Áö ¾ÊÀ¸¸é false. */ function validateTermObj(rearDateStrObj, foreDateStrObj, fieldName, allowSameDate) { if ( fieldName == undefined ) fieldName = "±â°£"; if ( allowSameDate == undefined ) allowSameDate = true; /* °¢°¢ À¯È¿ÇÑ ÀÏÀÚÀÎÁö °Ë»çÇÑ´Ù. */ if ( ! validateDateObj(rearDateStrObj, fieldName + " ¾ÕÀÏÀÚ") ) return false; if ( ! validateDateObj(foreDateStrObj, fieldName + " µÚÀÏÀÚ") ) return false; /* µÑ Áß ÇÑ ÀÏÀÚ¶óµµ ¾øÀ¸¸é true¸¦ µ¹·Á ÁÖ°í ³¡³½´Ù. */ if ( isEmptyObj(rearDateStrObj) || isEmptyObj(foreDateStrObj) ) return true; /* ¾Õ ÀÏÀÚ¿Í µÚ ÀÏÀÚ¸¦ ºñ±³ÇÑ´Ù. */ var result = compareDateObj(rearDateStrObj, foreDateStrObj); /* °°Àº ÀÏÀÚ¸¦ Çã¿ëÇϸé 0ÀÌ»ó ÇÏÁö ¾ÊÀ¸¸é 1ÀÌ»ó À̾î¾ß ÇÑ´Ù. */ if ( allowSameDate && result < 0 ) { showMessage(fieldName + " µÚ ÀÏÀÚ´Â ¾Õ ÀÏÀÚ¿Í °°°Å³ª ´ÊÀº ÀÏÀÚ À̾î¾ßÇÕ´Ï´Ù."); rearDateStrObj.focus(); return false; } else if ( ! allowSameDate && result < 1 ) { showMessage(fieldName + " µÚ ÀÏÀÚ´Â ¾Õ ÀÏÀÚº¸´Ù ´ÊÀº ÀÏÀÚ À̾î¾ßÇÕ´Ï´Ù."); rearDateStrObj.focus(); return false; } /* ¿©±â±îÁö ¿ÔÀ¸¸é À¯È¿ÇÏ´Ù. */ return true; } /** * TextÇü ÀÔ·ÂÆû¿¡ ÀÔ·ÂµÈ ½Ã°£(½Ã+ºÐ)ÀÌ À¯È¿ÇÑÁö * üũÇÏ¿© À¯È¿Çϸé hh24:miÀÇ ÇüÅ·Πº¯È¯ÇÏ¿© * returnÇϰí, À¯È¿ÇÏÁö ¾ÊÀ¸¸é ¿¡·¯¸Þ¼¼Áö¸¦ * º¸¿©ÁÜ(½Ã°£ ÀÔ·ÂÇʵåÀÇ onblur event¿¡ »ç¿ë) */ function checkTimeObj(obj) { var timeStr = obj.value; var valid = true; // ºó ¹®ÀÚ¿­À̸é Á¡°ËÇÏÁö ¾Ê´Â´Ù. if ( trim(timeStr) != "" ) { valid = checkTime(timeStr); if ( valid ) { var hourStr = timeStr.substring(0, 2); var minuteStr = timeStr.substring(2); obj.value = hourStr + ":" + minuteStr; } else { obj.focus(); } } return valid; } /** * TextÇü ÀÔ·ÂÆû¿¡ ÀÔ·ÂµÈ ½Ã°£(½Ã+ºÐ)ÀÌ À¯È¿ÇÑÁö * üũÇÏ¿© À¯È¿Çϸé hh24:miÀÇ ÇüÅ·Πº¯È¯ÇÏ¿© * returnÇϰí, À¯È¿ÇÏÁö ¾ÊÀ¸¸é ¿¡·¯¸Þ¼¼Áö¸¦ * º¸¿©ÁÜ(½Ã°£ ÀÔ·ÂÇʵåÀÇ onblur event¿¡ »ç¿ë) * * @param timeStr HHmm Çü½ÄÀÇ ½Ã°£Çü ¹®ÀÚ¿­ */ function checkTime(timeStr) { if ( trim(timeStr) == "" ) return true; timeStr = removeChar(timeStr, ':'); // ±æÀ̰¡ 4ÀÎÁö Á¡°ËÇÑ´Ù. if ( timeStr.length != 4 ) { alert("Çü½ÄÀÌ ¸ÂÁö ¾Ê½À´Ï´Ù. \"HHmm\" ÇüÅÂÀÇ ¼ýÀÚ·Î ÀÔ·ÂÇØ ÁֽʽÿÀ."); return false; } // ¼ýÀڷθ¸ ±¸¼ºµÇ¾ú´ÂÁö Á¡°ËÇÑ´Ù. if ( isNaN(timeStr) ) { alert("¹®ÀÚ¿­Àº ÀÔ·ÂÇÒ ¼ö ¾ø½À´Ï´Ù. \"HHmm\" ÇüÅÂÀÇ ¼ýÀÚ·Î ÀÔ·ÂÇØ ÁֽʽÿÀ."); return false; } // ½Ã°£ 2ÀÚ¸®, ºÐ 2ÀÚ¸®·Î ºÐ¸®ÇÑ´Ù. var hourStr = timeStr.substring(0, 2); var minuteStr = timeStr.substring(2); if ( hourStr < 0 || hourStr > 23 ) { alert("½Ã°£ °ªÀº 00¿¡¼­ 23 »çÀÌÀÇ °ªÀ̾î¾ß ÇÕ´Ï´Ù."); return false; } if ( minuteStr < 0 || minuteStr > 59 ) { alert("ºÐ °ªÀº 00¿¡¼­ 59 »çÀÌÀÇ °ªÀ̾î¾ß ÇÕ´Ï´Ù."); return false; } return true; }