/* * 檢查是否為日期(民國年西元年格式皆可) * 2009以後皆使用此function */ function isDate(str){ var dStr = trim(str); if( isNum(dStr) && dStr.length == 8 ){ year = parseFloat(dStr.substring(0, 4)); month = parseFloat(dStr.substring(4, 6)); day = parseFloat(dStr.substring(6, 8)); if( year < 1 || month < 1 || month > 12 || day < 1 ){ return false; } if( ( month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 ) && day > 31 ){ return false; } if( ( month == 2 || month == 4 || month == 6 || month == 9 || month == 11 ) && day > 30 ){ return false; } if( month == 2 ){ if( ( ( year % 4 ) == 0 ) && ( day > 29 ) ){ return false; } else if( ( year % 4 != 0 ) && ( day > 28 ) ){ return false; } } return true; } //add by DavidYun 2009-01-16 增加檢查民國年(0980116) else if(isNum(dStr) && dStr.length == 7){ year = parseFloat(dStr.substring(0,3)); year = year + 1911; month = parseFloat(dStr.substring(3, 5)); day = parseFloat(dStr.substring(5, 7)); if( year < 1 || month < 1 || month > 12 || day < 1 ){ return false; } if( ( month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12 ) && day > 31 ){ return false; } if( ( month == 2 || month == 4 || month == 6 || month == 9 || month == 11 ) && day > 30 ){ return false; } if( month == 2 ){ if( ( ( year % 4 ) == 0 ) && ( day > 29 ) ){ return false; } else if( ( year % 4 != 0 ) && ( day > 28 ) ){ return false; } } return true; } else return false; } /* * Wells提供檢查是否為數字的function 2009-01-13 * 是否為整數, 有傳入len,表示數字長度, eqFlag=y, 表示長度需等於len,其它則為<=len */ function isNum(str, len, eqFlag) { var re = /^\d*$/; if(len != null && re.test(len)) { if(eqFlag != null && eqFlag == "y") return (str.length == len && re.test(str)); else return (str.length <= len && re.test(str)); } else return re.test(str); } /* * 是否為英,數字,空白,str:待測字串(len:文字長度限制,eqFlag:y,表示長度需等於len,其它則為<=len) * str為必傳欄位,括號內為非必傳參數 * 2009以後檢查英數字皆用此chkStr */ function chkStr(str, len, eqFlag) { var re = /^[a-zA-Z0-9 ]*$/; if(len != null && isNum(len)) { if(eqFlag != null && eqFlag == "y") return (str.length == len && re.test(str)); else return (str.length <= len && re.test(str)); } else return re.test(str); } /* * 轉換日期為西元年 add by DavidYun 2009-01-16 * 2009以後皆使用此function */ function transDateToAD(date){ var year; var rest; if(date.length == 7){ year = parseFloat(date.substring(0,3)) + 1911; rest = date.substring(3,7); } else if(date.length == 8){ year = date.substring(0,4); rest = date.substring(4,8); } else{ alert("合法日期格式為yyyymmdd or yyymmdd!"); } return year + "" + rest; } /* * Modify from checkDateGap * Mark by DavidYun 2008-04-04 * 2009以後皆使用此function * 檢查日期區間是否大於validGap(=7)西元年與民國年皆適用 * @param date1 欲比較之日期1 * @param date2 欲比較之日期2 */ function checkDateGapBothFormat(date1, date2) { MINI_SECORD_TO_DAY = 60 * 60 * 24 * 1000; var validGap = 7; if(date1.length == 7 && date2.length == 7){ yy1 = date1.substring(0,3); mm1 = date1.substring(3,5); dd1 = date1.substring(5,7); yy2 = date2.substring(0,3); mm2 = date2.substring(3,5); dd2 = date2.substring(5,7); newdate1 = new Date(eval(yy1)+1911,eval(mm1-1),eval(dd1)); newdate2 = new Date(eval(yy2)+1911,eval(mm2-1),eval(dd2)); } else if(date1.length == 8 && date2.length == 8){ yy1 = date1.substring(0,4); mm1 = date1.substring(4,6); dd1 = date1.substring(6,8); yy2 = date2.substring(0,4); mm2 = date2.substring(4,6); dd2 = date2.substring(6,8); newdate1 = new Date(eval(yy1),eval(mm1-1),eval(dd1)); newdate2 = new Date(eval(yy2),eval(mm2-1),eval(dd2)); } else{ alert("起迄日期格式必須相同!"); return false; } range_days = (newdate2-newdate1)/MINI_SECORD_TO_DAY; //alert(range_days); if( range_days < 0 || range_days > validGap ) return false; else return true; } /* * 2008-10-13 DavidYun 新增西元日期是否合法之檢核 */ //======日期判斷================================================= function fnValidDate(dateStr) { var leap = 28; if (leapYear(parseInt(dateStr.substring(0,4))) == 1) leap = 29; var tmp = parseInt(dateStr.substring(4,6)) if (dateStr.substring(4,6) == '08') tmp = 8; if (dateStr.substring(4,6) == '09') tmp = 9 if (tmp < 1 || tmp > 12) { return (false) } var monthTable = new Array(12); monthTable[1] = 31; monthTable[2] = leap; monthTable[3] = 31; monthTable[4] = 30; monthTable[5] = 31; monthTable[6] = 30; monthTable[7] = 31; monthTable[8] = 31; monthTable[9] = 30; monthTable[10] = 31; monthTable[11] = 30; monthTable[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 > monthTable[tmp]) { return (false) } return (true) } //======閏年判斷================================================================== function leapYear (Year) { if (((Year % 4)==0) && ((Year % 100)!=0) || ((Year % 400)==0)) return (1); else return (0); } //=======刪除千分號================================================================= function changeVal(T1) { pos=0 var oring=T1.value; pos=oring.indexOf(","); while (pos !=-1) { oring=(oring).replace(",",""); pos=oring.indexOf(","); } return oring; } //=======加上千分號========================================================= function changeStr(T1) { c=""; var oring = T1.value var t1v1 = T1.value var t1v2 = ""; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (isNaN(Math.abs(T1.value))) { alert("請輸入數字"); return oring; }else{ if (eval(T1.value) < 0 ) c="-"; } if(T1.value.length == 0) return oring; if(Math.abs(T1.value) == 0) return oring; T1.value= Math.abs(T1.value); t1v1 = T1.value if((pos=t1v1.indexOf(".")) != -1) { t1v2 = t1v1.substring(pos,((T1.value).length)); t1v1 = t1v1.substring(0,pos); } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ pos=oring.indexOf(",") if (pos==-1) { var len = t1v1.length; a=Math.floor(len % 3) b=Math.floor(len / 3 -1) if(a !=0 && b >= 0) oring = t1v1.substring(0,a) + ","; else if(b<0) oring = t1v1 else oring = ""; for(i=0;i 4) startdate = (Math.abs(startdate.substring(0,startdate.length-4))+1911)+startdate.substring(startdate.length-4,startdate.length); else if(startdate.length >=8) startdate = (Math.abs(startdate.substring(0,startdate.length-4)))+startdate.substring(startdate.length-4,startdate.length); else alert(message + "日期有誤!"); if(!fnValidDate(startdate)) { alert(message + "日期有誤!"); return false; } return startdate; } //======檢查小數點位數是否正確=================================================================== function isRightDecimal(checkValue,checklength,szWarning) { if(checkValue.indexOf(".") != -1 ) { var len = checkValue.substring(checkValue.indexOf(".")+1,checkValue.length); if(len.length > checklength) { if(checklength != 0) alert( szWarning + "的小數點後只能有 " + checklength + " 個位數"); else alert( szWarning + "不能有小數位數"); return false; } } return true; } //======月份相加======================================================= function AddMonth(baseDate,amount) { if(isNaN(amount=parseInt(amount))) return false; if(baseDate.length<5) return false; var toWestYear = 0; var monthTable = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; var year = Math.abs(baseDate.substring(0,baseDate.length-4)); if(year.length<4) toWestYear = 1911; var month = Math.abs(baseDate.substring(baseDate.length-4,baseDate.length-2)); var day = Math.abs(baseDate.substring(baseDate.length-2,baseDate.length)); var addyear = (month+amount)/12; addyear = (addyear >=0)?Math.floor(addyear):Math.ceil(addyear); var newmonth = (month+amount)%12; if(newmonth<=0) { newmonth = 12+newmonth; addyear --; } year += addyear; monthTable[1] = (leapYear(addyear+toWestYear) == 1)?29:28; if(day>monthTable[newmonth-1]) day = monthTable[newmonth-1]; return (year*10000) + (newmonth*100) + day; } //================================================================ //=======檢查日期起迄是否相差七日================================ function checkDateGap(date1, date2) { MINI_SECORD_TO_DAY = 60 * 60 * 24 * 1000; yy1 = date1.substring(0,3); mm1 = date1.substring(3,5); dd1 = date1.substring(5,7); yy2 = date2.substring(0,3); mm2 = date2.substring(3,5); dd2 = date2.substring(5,7); newdate1 = new Date(eval(yy1)+1911,eval(mm1-1),eval(dd1)); newdate2 = new Date(eval(yy2)+1911,eval(mm2-1),eval(dd2)); range_days = Math.abs((newdate2-newdate1)/MINI_SECORD_TO_DAY); if( range_days > 7 ) return false; else return true; } /* * add by DavidYun 2008-10-13 * @param 西元日期(8碼) */ function isNum(str) { re = /^\d*$/; //是否為數字 return re.test(str); } function trim(str) { return str.replace(/^\s+|\s+$/g, ""); }