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/> 
jsp
技术图片
 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     
action
技术图片
 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>
struts
技术图片
 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>
script

<a>

 

以上是关于My97DatePicker关于请假日期前后端判断已选日期不可再选的主要内容,如果未能解决你的问题,请参考以下文章

My97DatePicker选择两个日期范围不超过30天的demo

My97DatePicker日期范围限制

日期插件My97DatePicker

My97DatePicker日历插件特殊日期做标记的使用

My97DatePicker设置,包括隐藏 清空,设置最大日期等 转载

jsp日期插件My97DatePicker