/** * Calendar */ var _date_cal = null; function showCalendar(elementName) { if (_date_cal == null) { _date_cal = new Epoch('_date_cal','popup', document.getElementById(elementName)); } var element = elementName; if (typeof elementName == "string") { element = document.getElementById(elementName); } _date_cal.setTarget(element); _date_cal.show(); } function setToday(elementId){ var today = new Date(); var year = today.getFullYear(); var month = today.getMonth()+1; if (month < 10){ month = "0"+month; } var day = today.getDate(); if (day < 10){ day = "0"+day; } var formatedDate = year+""+month+""+day; document.getElementById(elementId).value = formatedDate; } function checkDate(date){ if(date!=""){ if(isNaN(date)|| date.length!=8){ return true; } } return false; } function checkHour(hour){ if(hour!=""){ if(isNaN(hour) || hour > 23|| hour < 0){ return true; } } return false; } function checkMin(min){ if(min!=""){ if(isNaN(min)|| min > 59|| min < 0){ return true; } } return false; } /************* 日期檢查 ************* 1.日期字串格式必須為 yyyymmdd. 2.必須搭配 isLeap() 來判斷閏年. *************************************/ function dateValidate(dateStr) { if(dateStr<0 || isNaN(dateStr) || (dateStr.length != 8)) { alert("日期格式錯誤, 請用yyyymmdd"); return false; } var leap = 28; if (isLeap(parseInt(dateStr.substring(0,4)))) leap = 29; var mtmp = parseInt(dateStr.substring(4,6)) if (dateStr.substring(4,6) == '08') mtmp = 8; if (dateStr.substring(4,6) == '09') mtmp = 9; if (mtmp < 1 || mtmp > 12) { alert("月錯誤"); return false; } var dayInMonth = new Array(12); dayInMonth[1] = 31; dayInMonth[2] = leap; dayInMonth[3] = 31; dayInMonth[4] = 30; dayInMonth[5] = 31; dayInMonth[6] = 30; dayInMonth[7] = 31; dayInMonth[8] = 31; dayInMonth[9] = 30; dayInMonth[10] = 31; dayInMonth[11] = 30; dayInMonth[12] = 31; var dtmp = parseInt(dateStr.substring(6)); if (dateStr.substring(6) == '08') dtmp = 8; if (dateStr.substring(6) == '09') dtmp = 9; if(dtmp < 1 || dtmp > dayInMonth[mtmp]) { alert("日錯誤"); return false; } return true; } /************* 閏年判斷 **************/ function isLeap (Year) { if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) return true; else return false; } /************* 字串轉日期 ************* 1.日期字串格式必須為 yyyymmdd. 2.必須搭配 dateValidate(), isLeap() 來先判斷日期是否正確. *************************************/ function str2Date(str) { if(dateValidate(str)) { var yyyy = str.substring(0, 4); var mm = str.substring(4, 6)-1; var dd = str.substring(6, 8); return new Date(yyyy, mm, dd); } else { return false; } } /************* 日期轉字串 ************* 1.傳入的日期格式必須為 Date. 2.產生的日期字串格式為 yyyymmdd. *************************************/ function date2Str(date) { var yyyy = date.getFullYear(); var mm = date.getMonth()+1; if (mm < 10) mm = "0"+mm; var dd = date.getDate(); if (dd < 10) dd = "0"+dd; return yyyy+""+mm+""+dd; } /************* 加減月份 ************* 1.必須搭配 dateValidate(), isLeap(), date2Str 來先判斷日期是否正確. 2.日期字串格式必須為 yyyymmdd. 3.產生的日期字串格式為 yyyymmdd. *************************************/ function addMonth(baseDateStr, addedMonthNum) { if(dateValidate(baseDateStr)) { var yyyy = baseDateStr.substring(0, 4); var mm = baseDateStr.substring(4, 6)-1-(-addedMonthNum); var dd = baseDateStr.substring(6, 8); var addedMonthDate = new Date(yyyy, mm, dd); return date2Str(addedMonthDate); } else { return false; } } /************* 加減天數 ************* 1.必須搭配 dateValidate(), isLeap(), date2Str 來先判斷日期是否正確. 2.日期字串格式必須為 yyyymmdd. 3.產生的日期字串格式為 yyyymmdd. *************************************/ function addDay(baseDateStr, addedDayNum) { if(dateValidate(baseDateStr)) { var yyyy = baseDateStr.substring(0, 4); var mm = baseDateStr.substring(4, 6)-1; var dd = baseDateStr.substring(6, 8)-(-addedDayNum); var addedMonthDate = new Date(yyyy, mm, dd); return date2Str(addedMonthDate); } else { return false; } } /************* 兩個日期的差距(也可當做檢查起迄日期) ************* 1.必須搭配 dateValidate(), isLeap(), str2Date 來先判斷日期是否正確. 2.日期字串格式必須為 yyyymmdd. 3.回傳的單位為"天"(dateStr2減dateStr1). *************************************/ function daysDistance(dateStr1, dateStr2) { if(dateValidate(dateStr1) && dateValidate(dateStr2)) { var date1 = Date.parse(str2Date(dateStr1)); var date2 = Date.parse(str2Date(dateStr2)); return Math.ceil((date2-date1)/(24*60*60*1000)); } else { return false; } } /************* 民國年的日期轉為西元年的日期(yyyymmdd) ************* 1.日期字串格式必須為 yymmdd, (yy為民國年). 2.回傳的格式為yyyymmdd. *************************************/ function twDate2Ad(dateStr) { var yy = dateStr.substring(0, 2)-(-1911); var mm = dateStr.substring(2, 4); var dd = dateStr.substring(6); return yy+""+mm+""+dd; } /************* 西元年的日期(yyyymmdd)轉為民國年 ************* 1.日期字串格式必須為 yyyymmdd. 2.回傳的格式為 yymmdd, (yy為民國年). *************************************/ function ad2TwDate(dateStr) { var yyyy = dateStr.substring(0, 4)-1911; var mm = dateStr.substring(4, 6); var dd = dateStr.substring(6); return yyyy+""+mm+""+dd; } /************* 日期區間檢查 ************* 檢查兩個日期是否為有效區間 *************************************/ function isValidDateRange(date1, date2) { if (parseInt(date2.substring(0,4)) < parseInt(date1.substring(0,4))){ alert(parseInt(date2.substring(0,4))+'<'+parseInt(date1.substring(0,4))); return false; } else if (parseInt(date2.substring(4,6)) < parseInt(date1.substring(4,6))) { alert(parseInt(date2.substring(4,6))+'<'+parseInt(date1.substring(4,6))); return false; } else if (parseInt(date2.substring(6,8)) < parseInt(date1.substring(6,8))) { alert(parseInt(date2.substring(6,8))+'<'+parseInt(date1.substring(6,8))); return false; } return true; } /********** Add by Brenda Hou for B2C Begin **********/ /** * 比對民國日期區間 * @param openerObjS 起始日期物件 * @param openerObjE 結束日期物件 * @param fName 欄位名稱 * @return * @author Brenda Hou 2011/08/19 */ function checkDatePeriodByROC(openerObjS,openerObjE, fName){ var sDate=openerObjS.value; if(sDate == "") return true; var sYear=sDate.substring(0, sDate.indexOf("/")); sYear = Math.abs(sYear) + 1911; sDate = sYear + sDate.substring(sDate.indexOf("/")); var eDate=openerObjE.value; if(eDate == "") return true; var eYear=eDate.substring(0, eDate.indexOf("/")); eYear = Math.abs(eYear) + 1911; eDate = eYear + eDate.substring(eDate.indexOf("/")); var startDate=new Date(sDate); var endDate=new Date(eDate); // alert(startDate.getFullYear() + " " + startDate.getMonth() + " " + startDate.getDate()); // alert(endDate.getFullYear() + " " + endDate.getMonth() + " " + endDate.getDate()); if(startDate > endDate){ alert(fName + "(起)不得大於" + fName + "(迄)"); openerObjS.focus(); return false; }else{ return true; } return true; } /** * 比對民國日期區間 * @param openerObjS 起始日期物件 * @param openerObjE 結束日期物件 * @param msg 警告訊息 * @return * @author Brenda Hou 2011/08/19 */ function checkDatePeriodByROCMsg(openerObjS,openerObjE, msg){ var sDate=openerObjS.value; if(sDate == "") return true; var sYear=sDate.substring(0, sDate.indexOf("/")); sYear = Math.abs(sYear) + 1911; sDate = sYear + sDate.substring(sDate.indexOf("/")); var eDate=openerObjE.value; if(eDate == "") return true; var eYear=eDate.substring(0, eDate.indexOf("/")); eYear = Math.abs(eYear) + 1911; eDate = eYear + eDate.substring(eDate.indexOf("/")); var startDate=new Date(sDate); var endDate=new Date(eDate); // alert(startDate.getFullYear() + " " + startDate.getMonth() + " " + startDate.getDate()); // alert(endDate.getFullYear() + " " + endDate.getMonth() + " " + endDate.getDate()); if(startDate > endDate){ alert(msg); openerObjS.focus(); return false; }else{ return true; } return true; } /********** Add by 2295 for B2C日期區間上限檢核 End **********/ function checkDateQueryIsValid(openerObjS,openerObjE, openerObjKey,msg){ var sDate=openerObjS.value; if(sDate == "") return true; var sYear=sDate.substring(0, sDate.indexOf("/")); sYear = Math.abs(sYear) + 1911; sDate = sYear + sDate.substring(sDate.indexOf("/")); //alert("sDate="+sDate); var eDate=openerObjE.value; if(eDate == "") return true; var eYear=eDate.substring(0, eDate.indexOf("/")); eYear = Math.abs(eYear) + 1911; eDate = eYear + eDate.substring(eDate.indexOf("/")); //alert("eDate="+eDate); var startDate=new Date(sDate); var endDate=new Date(eDate); //alert("startDate="+startDate.getFullYear() + " " + startDate.getMonth() + " " + startDate.getDate()); //alert("endDate="+endDate.getFullYear() + " " + endDate.getMonth() + " " + endDate.getDate()); var key = openerObjKey.value; //alert("startDate.date2Str="+date2Str(startDate)); //alert("key="+key); var afterMonth = addMonth(date2Str(startDate), key); //alert("alert.mm+"+key+"="+afterMonth); var yyyy = afterMonth.substring(0,4); var mm = afterMonth.substring(4,6); var dd = afterMonth.substring(6,8); var afterDate = new Date(yyyy+"/"+mm+"/"+dd); //alert("afterDate="+afterDate.getFullYear() + " " + afterDate.getMonth() + " " + afterDate.getDate()); if(endDate > afterDate){ msg = msg.replace("{0}", key); alert(msg); openerObjS.focus(); //alert(" endDate > afterDate"); return false; }else{ //alert(" endDate <= afterDate"); return true; } } /********** Add by 2295 for B2C日期區間上限檢核 End **********/ //add by KT 日期格式為100/02/20 function checkDateRange(StartDate,EndDate, key,msg){ var myStartDate = new Date(StartDate); var myEndDate = new Date(EndDate); // 天數,86400000是24*60*60*1000,除以86400000就是有幾天 if ( (((myEndDate - myStartDate)/ 86400000)/(30*key)) > 1 ){ alert(msg); return false; }else{ return true; } }