7DatePicker_限制开始日期和结束日期在同一个月
来源:http://bluebing.iteye.com/blog/1863510
PS:最近使用springmvc+ibatis+mysql做项目的后台,涉及到大量统计页面.
其中一个表已有了400多万行数据,优化sql和增加索引后,效率仍然低下,并且数据还处于几何增长中.
几经折腾决定按月分表,月底把数据转移到上个月份命名的表中,当月表则不加后缀:即table_1303,table_1304,table(当月)...
之前大量的统计页面都使用了My97DatePicker时间控件来做查询.
因为按月加表是动态的,所以需要在查询过程中做限制,查询的起始时间和结束时间是同一个月.
网上搜索没有现成的,便自己写了一个js,这里备忘,也方便需要的人查找.
最后再附上简单的流程图.
碰到个问题 使用form:input时,控件中的$dp.$D便不能用,页面报错.猜测为在表单中clientID不一致了,
但不解.
- <td class="label" width="10%">开始时间:</td>
- <td width="10%"><input class="Wdate" type='text'
- id="beginTime" name="beginTime" value='${beginTime}'
- onFocus="WdatePicker({minDate:'2013-04-01',maxDate:'#F{$dp.$D(\'endTime\')||\'%y-%M-%d\'}'})" />
- </td>
- <td width="10%"></td>
- <td class="label" width="10%">结束时间:</td>
- <td width="10%"><input class="Wdate" type='text'
- id='endTime' name='endTime' value='${endTime}'
- onFocus="var date=limitMonthDate(2);WdatePicker({minDate:'#F{$dp.$D(\'beginTime\')||\'2013-04-01\'}',maxDate:date})" />
- </td>
控件的ofFocus事件中实现了以下功能:
开始结束日期不得小于数据库表的创建时间(2013-04-01),且不得大于当天;
结束日期不得小于起始日期,且不得大于当月;
js的limitMonthDate()方法功能:
限制两个时间为同一个月份.
- <script language="javascript">
- //限制开始和结束时间为同一个月
- function limitMonthDate(e) {
- var DateString;
- if (e == 2) {
- var beginDate = $dp.$("beginTime").value;
- if (beginDate != "" && beginDate != null) {
- var limitDate = new Date(beginDate);
- limitDate.setDate(new Date(limitDate.getFullYear(), limitDate
- .getMonth() + 1, 0).getDate()); //获取此月份的天数
- DateString = limitDate.getFullYear() + '-'
- + (limitDate.getMonth() + 1) + '-'
- + limitDate.getDate();
- return DateString;
- }
- }
- if (e == 1) {
- var endDate = $dp.$("endTime").value;
- if (endDate != "" && endDate != null) {
- var limitDate = new Date(endDate);
- limitDate.setDate("1"); //设置闲置时间为月初
- DateString = limitDate.getFullYear() + '-'
- + (limitDate.getMonth() + 1) + '-'
- + limitDate.getDate();
- return DateString;
- }
- }
- }
- </script>