My97DatePicker关于请假日期前后端判断已选日期不可再选
Posted tripmaster
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了My97DatePicker关于请假日期前后端判断已选日期不可再选相关的知识,希望对你有一定的参考价值。
关于My97DatePicker关于请假日期前后端判断已选日期不可再选,不过有个小bug(关于在数据库中已经存在 比如:请假12-15,17-18这几天,但我又请了11号 16号,在前端页面没有提示 其实已经重复了,不能再请,我写在了后台页面,可查看连接https://www.cnblogs.com/TripMaster/p/11398399.html),后期会修改。
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>
以上是关于My97DatePicker关于请假日期前后端判断已选日期不可再选的主要内容,如果未能解决你的问题,请参考以下文章
My97DatePicker选择两个日期范围不超过30天的demo