Query UI DateRangePicker自定义面板个数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Query UI DateRangePicker自定义面板个数相关的知识,希望对你有一定的参考价值。

 

jQuery UI DateRangePicker 最大的特色是可以定义展示的月面板个数,可以直接选择时间范围,

还可以定义快捷日期连接,而bootstarp的Date Range Picker只能展示两个月面板,范围超过两个月的时候需要翻,

jqueryuidataRangeDemo: http://tamble.github.io/jquery-ui-daterangepicker/

 

 技术分享

 

 

 

 

bootstarpDate RangeDemo: http://www.daterangepicker.com/

 技术分享

 

 

依赖: 
 - jQuery 1.8.3+
 - jQuery UI 1.9.0+ (widget factory, position utility, button, menu, datepicker)
- moment.js 2.3.0+
 
 
引入<link href="xxx/jquery-ui-1.12.1/jquery-ui.min.css" rel="stylesheet">
<link href="xxx/jquery-ui-daterangepicker-0.5.0/jquery.comiseo.daterangepicker.css" rel="stylesheet">

<script src="xxx/jquery-ui-1.12.1/jquery-ui.min.js"></script>
<script src="xxx/moment.js"></script>
<script src="xxx/jquery-ui-daterangepicker-0.5.0/jquery.comiseo.daterangepicker.js"></script>
 


配置的代码:<script>
   var  defaults = {
       initialText : 昨天,//默认显示
      
applyButtonText:"确定",
       cancelButtonText:"取消",
       clearButtonText:"",
       rangeSplitter:" ",
       dateFormat: ‘mm-dd‘,//日期格式
      
altFormat: ‘yy-mm-dd‘,//Submitted date format
      
datepickerOptions: {//所有参数http://www.css88.com/jquery-ui-api/datepicker/
           minDate:-90,//
          
maxDate: 0,
           monthNames: [一月,二月,三月,四月,五月,六月,七月,八月,九月,十月,十一月,十二月],
           dayNames: [星期日,星期一,星期二,星期三,星期四,星期五,星期六],
           dayNamesShort: [周日,周一,周二,周三,周四,周五,周六],
           dayNamesMin: [,,,,,,],
           numberOfMonths : 4,
           onSelect: function(dateText) {//选择日期后执行的操作
                                             }
       },
       presetRanges: [{
           text: 今日实时,
           dateStart: function() { return moment() },
           dateEnd: function() { return moment() }
       }, {
           text: 昨天,
           dateStart: function() { return moment().add(-1,‘days‘) },
           dateEnd: function() { return moment().add(-1,‘days‘) }
       },{
           text: 前天,
           dateStart: function() { return moment().add(-2,‘days‘ ) },
           dateEnd: function() { return moment().add(-2,‘days‘) }
       }, {
           text: 最近7,
           dateStart: function() { return moment().add(-7,‘days‘) },
           dateEnd: function() { return moment().add(-1,‘days‘) }
       }, {
           text: 最近15,
           dateStart: function() { return moment().add(-15,‘days‘ ) },
           dateEnd: function() { return moment().add(-1,‘days‘) }
       }, {
           text: 最近30,
           dateStart: function() { return moment().add(-30,‘days‘) },
           dateEnd: function() { return moment().add( -1,‘days‘) }
       }
       ],
       change:function (e) {
           daysChange();
       },
       close:function () {
           upSelectAUL="";
       }

    };
   /**
    *
初始化日历控件
    * @param options
    */
   
function initRangeDate(target,opt){
        console.log("initRangeDate");
       var options = $.extend(true,{},defaults,opt?opt:{});
       target.daterangepicker(options);

    };
        

         
    /**
     *
获得选中的日期
     */
   
function getSelectDays(target) {
        var selectedDay="";
        if(!!!target){//指定默认控件
           
if($("#drp_autogen0").prev().length>0){
                target = $("#drp_autogen0").prev();
            }
        }
        if(!!target){
           var obj = target.daterangepicker("getRange");
            selectedDay =  !!obj?formatRange(obj):"";//没有初始值返回 ""
       
}
        if(selectedDay==""){//页面上没有控件或者还没有初始完成,取input
           
selectedDay = $("#pastDays").val();
        }
        return selectedDay;
    }
   
    /**
     *
设置控件时间
     * @param rangeObj
开始时间,结束时间
     */
   
function setPastDays(target,rangeObj) {
        if(!!rangeObj){
             var obj={};
             if(!!rangeObj.start){
                 obj.start=moment(rangeObj.start).toDate();
             }
             if(!!rangeObj.end){
                 obj.end=moment(rangeObj.end).toDate();
             }
            target.daterangepicker("setRange", obj);
        }
    }

       /**
    *
选中的天数
    *
没有选择日期返回d
    */
  
function selectedDays(d) {
        if(!!!getSelectDays()){
            return d;
        }else{
            var jsonObj = JSON.parse(getPastDays());
            if(jsonObj.end==jsonObj.start){
                return 1;
            }
            return dateDiff(jsonObj.end,jsonObj.start)
        }
    }

   // formats a date range as JSON
  
function formatRange(range) {
       var dateFormat = defaults.altFormat,
               formattedRange = {};
       formattedRange.start = $.datepicker.formatDate(dateFormat, range.start);
       formattedRange.end = $.datepicker.formatDate(dateFormat, range.end);
       return JSON.stringify(formattedRange);
   }
</script>

 

<input  id="pastDays" value=<%=pastDaysVal%>type="hidden"/>

#pastDays

用来初始化日期控件

$(function(){

//初始日历
initRangeDate($("#pastDays"));

需要重写日期的配置只需再传递一个配置对象

var  opt={   icon: "",
            applyButtonText:"",
            cancelButtonText:"",
            datepickerOptions: {
                minDate:-7,
               
maxDate: 0,
                numberOfMonths : 1,
                onSelect: function(selectedDate) {}
             }

       }

initRangeDate($(‘#pastDays‘), opt)
这样初始化中的var options = $.extend(true,{},defaults,opt?opt:{});
会用opt对象的属性覆盖defaults 里的默认属性
 
 
 

初始值的问题:在初始控件之前在 需要初始化的input里按格式设置上默认值就好

<input id="pastDays" value="{"start":"2017-06-05","end":"2017-07-11"}" style="display: none;">

 

实现单日期选择本身插件选择单日期,选择一个日期—点击确定,但既然是单日期就不必点击确定按钮了,所以利用jquery ui 的datepicker     中的onSelect方法当选择的时候获得选中的值,然后赋给 input,并关闭控件

datepickerOptions: {//上面默认配置里有说明
onSelect: function(selectedDate) {
$(‘ID‘).daterangepicker("setRange", {start: moment(selectedDate, "MM-DD-YYYY").toDate()});
$(‘ID‘).daterangepicker("close");
}}

 

 






















































































































































以上是关于Query UI DateRangePicker自定义面板个数的主要内容,如果未能解决你的问题,请参考以下文章

是否可以向 Material DateRangePicker 添加页脚?

city-picker.js插件怎么回显

daterangepicker关闭父引导下拉列表

daterangepicker 使用说明+参数详解

从 daterangepicker 禁用或删除 mintues 下拉菜单

关于daterangepicker的配置