My97DatePicker关于请假日期前后端判断已选日期不可再选
关于My97DatePicker关于请假日期前后端判断已选日期不可再选,不过有个小bug(关于在数据库中已经存在 比如:请假12-15,17-18这几天,但我又请了11号 16号,在前端页面没有提示 其实已经重复了,不能再请,我写在了后台页面,可查看连接https://www.cnblogs.com/TripMaster/p/11398399.html),后期会修改。
1 遍历所有的日期 取出最小值,然后for遍历最大不能超过你所取到的日期 2 3 beginArray.sort();//遍历所有时间,进行排序,小——大。取最小值进行比较,如果小于返回,没有操作,大于返回操作数值 4 5 //alert(beginArray[0]); 6 7 var begin = $("#beginLeave").val(); 8 var i; 9 for( i=0 ;i<=beginArray.length;i++ ){ 10 if(begin<beginArray[i]){ 11 j = i; 12 //alert(j+","+i); 13 break; 14 } 15 }; 16 17 18 19 maxDate:beginArray[i],
1 <tr> 2 <td align="right" width="30%">开始时间:</td> 3 <td align="left"><input type="text" name="tbLeave.beginLeave" readOnly="readonly" 4 id="beginLeave" 5 onClick="WdatePicker({onclearing:wp()})" class="Wdate" /><br/> 6 </td> 7 </tr><br/> 8 <tr> 9 <td align="right" width="30%">结束时间:</td> 10 <td align="left"><input type="text" name="tbLeave.endLeave" readOnly="readonly" 11 id="endLeave" onClick="WdatePicker({onclearing:wp()})" class="Wdate"/><br/></td> 12 </tr><br/>
1 public String getVacationsTime(){ 2 TbUser tbUser=(TbUser) getFromSession("loginUser"); 3 String beginLeave = ""; 4 String endLeave = "";//构造2个字符串存放每个请假条的开始和结束时间//获取当前用户所有请假条 5 try { 6 leaveList=leaveService.getLeavesByUsername(tbUser.getId()); 7 for (int i = 0; i < leaveList.size(); i++) { 8 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); 9 String begins = sdf.format(leaveList.get(i).getBeginLeave()); 10 String ends = sdf.format(leaveList.get(i).getEndLeave()); 11 12 if(beginLeave!="" && beginLeave!=null){//拼接开始时间和结束时间的字符串,传递到用户端 13 beginLeave+=","; 14 } 15 beginLeave+=begins; 16 if(endLeave!="" && endLeave!=null){ 17 endLeave+=","; 18 } 19 endLeave+=ends; 20 21 } 22 23 resultMap.put("beginLeave", beginLeave); 24 resultMap.put("endLeave", endLeave); 25 26 log.info("method getVacationsTime 获取开始结束时间 is successful!!!!"); 27 resultMap.put("retcode", RetCode.SUCCESS); 28 resultMap.put("retmsg", "获取开始结束时间 成功"); 29 30 log.info("请假时间冲突,fail!!!"); 31 resultMap.put("retcode", RetCode.FAIL); 32 resultMap.put("retmsg", "请假时间冲突,从新选择"); 33 34 } catch (Exception e) { 35 e.printStackTrace(); 36 log.error("method addEmails bug:{}",e); 37 resultMap.put("retcode", RetCode.UNKOWN_WRONG); 38 resultMap.put("retmsg", "未知错误,请重试或联系管理员"); 39 } 40 41 return SUCCESS; 42 }
1 <action name="getVacationsTime" class="leaveAction" method="getVacationsTime"> 2 <result type="json"> 3 <param name="root">resultMap</param> 4 </result> 5 </action> 6 7 <action name="beginTOEnd" class="leaveAction" method="beginTOEnd"> 8 <result type="json"> 9 <param name="root">resultMap</param> 10 </result> 11 </action>
1 <script type="text/javascript"> 2 $(function wp(){ 3 var beginArray=new Array(); 4 var endArray=new Array(); 5 var disableDate=new Array(); 6 //得到数据库中beginLeave和endLeave,构造数组 7 $(document).ready(function(){ 8 var url="${ctx}/leave/getVacationsTime.action";//获取到所有值,进行判断 9 $.post( 10 url, 11 function(data){ 12 //alert(data.beginLeave); 13 //alert(data.endLeave); 14 15 beginArray = data.beginLeave.split(",");//去掉 , 号 16 endArray = data.endLeave.split(","); 17 18 var index=0; 19 for(var i=0;i<beginArray.length;i++){//遍历每个TbLeave的开始时间和结束时间 20 var beginLeave=new Date(beginArray[i]).dateFormat(); 21 var endLeave=new Date(endArray[i]).dateFormat(); 22 beginArray[i] = beginLeave; 23 endArray[i] = endLeave; 24 var arr=getAll(beginLeave,endLeave);//调用下面自定义getAll()方法,获取该TbLeave开始时间和结束时间之间所有的日期 25 for(var j=0;j<arr.length;j++){//遍历getAll()所有的日期,放到disableDate数组中 26 27 disableDate[index]=arr[j]; 28 index+=1; 29 } 30 } 31 //alert(disableDate.toString()); //输出是否显示所有日期 32 } 33 ); 34 }); 35 $("#beginLeave").click(function(){//开始时间日历控件的单击事件 36 WdatePicker({ 37 skin:'whyGreen', 38 dateFmt:'yyyy-MM-dd', 39 minDate:'%y-%M-%d+1',//限制今天之前的日期 40 maxDate:'#F{$dp.$D(\'endLeave\')}',//endLeave是结束时间的id 41 disabledDays:[0,6],//限制周六和周日不能请假 42 disabledDates:disableDate//限制所有的日期,disableDate数组获取到的值,全部限制 43 }); 44 }); 45 $("#endLeave").click(function(){//结束时间日历控件的单击事件 46 WdatePicker({ 47 skin:'whyGreen', 48 dateFmt:'yyyy-MM-dd', 49 minDate:'#F{$dp.$D(\'beginLeave\')}', 50 disabledDays:[0,6], 51 disabledDates:disableDate 52 }); 53 }); 54 55 //获取begin和end之间所有的 日期格式化 函数 56 Date.prototype.dateFormat = function() { 57 var s = ''; 58 var mouth = (this.getMonth() + 1)>=10?(this.getMonth() + 1):('0'+(this.getMonth() + 1)); 59 var day = this.getDate()>=10?this.getDate():('0'+this.getDate()); 60 s += this.getFullYear() + '-'; // 获取年份。 61 s += mouth + "-"; // 获取月份。 62 s += day; // 获取日。 63 return (s); // 返回日期。 64 }; 65 //获取begin和end之间所有的 日期 函数 66 function getAll(begin, end) { 67 var arr=new Array(); 68 var ab = begin.split("-"); 69 var ae = end.split("-"); 70 var db = new Date(); 71 db.setUTCFullYear(ab[0], ab[1] - 1, ab[2]); 72 var de = new Date(); 73 de.setUTCFullYear(ae[0], ae[1] - 1, ae[2]); 74 var unixDb = db.getTime(); 75 var unixDe = de.getTime(); 76 var i=0; 77 for (var k = unixDb; k <= unixDe;) { 78 /* console.log((new Date(parseInt(k))).dateFormat()); */ 79 arr[i]=(new Date(parseInt(k))).dateFormat(); 80 i+=1; 81 k = k + 24 * 60 * 60 * 1000; 82 } 83 return arr; 84 } 85 86 }); 87 </script>
<a>
白衣胜雪,才冠三梁!