Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 如何覆盖引导日期选择器以允许任意时间选择?_Jquery_Twitter Bootstrap 3_Bootstrap Datepicker_Hour - Fatal编程技术网

Jquery 如何覆盖引导日期选择器以允许任意时间选择?

Jquery 如何覆盖引导日期选择器以允许任意时间选择?,jquery,twitter-bootstrap-3,bootstrap-datepicker,hour,Jquery,Twitter Bootstrap 3,Bootstrap Datepicker,Hour,我使用允许选择任意的小时数。例如,用户可以选择1->50小时之间的任何时间。 在当前设置中,我使用格式:“HH”将格式选项设置为仅允许小时选择,但这将最大小时选择限制为23小时 问题 有人知道如何覆盖引导日期选择器上的默认小时选择值吗 在下面的日期选择器中,选择大于23小时的时间将选择器重置为0: 这是脚本和选项中日期选择器的声明: //Init the Next Update arbitrary hour picker $(function () { $('#

我使用允许选择任意的小时数。例如,用户可以选择
1->50小时之间的任何时间。

在当前设置中,我使用
格式:“HH”
将格式选项设置为仅允许小时选择,但这将最大小时选择限制为23小时

问题 有人知道如何覆盖引导日期选择器上的默认小时选择值吗

在下面的日期选择器中,选择大于23小时的时间将选择器重置为0:

这是脚本和选项中日期选择器的声明:

    //Init the Next Update arbitrary hour picker
    $(function () {
        $('#NextUpdateDisplay').datetimepicker({
            ignoreReadonly: true,
            allowInputToggle: true,
            format: 'HH',
            widgetPositioning: {
                horizontal: 'right',
                vertical: 'bottom'
            }
        });
    });

Bootstrap.timepicker.js
中,找到以下行:

`this.hour >= 24 ? this.hour = 23`
将其更改为:

`this.hour >= 51 ? this.hour = 50`
确保在实例化
时间选择器时,使用
showMeridian=false
作为选项:

$(".timepicker").timepicker({
    showMeridian: false
});
编辑:如果希望其他日期选择器正常:

  • TimePicker
    复制到新对象
    TimePickerEx
  • 覆盖您想要的功能(可以使用
    Object.create()
    ,
  • Yeilding:

    function TimePickerEx() {
      return Object.create(TimePicker(), {
        setTime: function(time, ignoreWidget) {
          if (!time) {
            this.clear();
            return;
          }
    
          var timeArray,
              hour,
              minute,
              second,
              meridian;
    
          if (typeof time === 'object' && time.getMonth){
            // this is a date object
            hour    = time.getHours();
            minute  = time.getMinutes();
            second  = time.getSeconds();
    
            if (this.showMeridian){
              meridian = 'AM';
              if (hour > 12){
                meridian = 'PM';
                hour = hour % 12;
              }
    
              if (hour === 12){
                meridian = 'PM';
              }
            }
          } else {
            if (time.match(/p/i) !== null) {
              meridian = 'PM';
            } else {
              meridian = 'AM';
            }
    
            time = time.replace(/[^0-9\:]/g, '');
    
            timeArray = time.split(':');
    
            hour = timeArray[0] ? timeArray[0].toString() :                 timeArray.toString();
            minute = timeArray[1] ? timeArray[1].toString() : '';
            second = timeArray[2] ? timeArray[2].toString() : '';
    
            // idiot proofing
            if (hour.length > 4) {
              second = hour.substr(4, 2);
            }
            if (hour.length > 2) {
              minute = hour.substr(2, 2);
              hour = hour.substr(0, 2);
            }
            if (minute.length > 2) {
              second = minute.substr(2, 2);
              minute = minute.substr(0, 2);
            }
            if (second.length > 2) {
              second = second.substr(2, 2);
            }
    
            hour = parseInt(hour, 10);
            minute = parseInt(minute, 10);
            second = parseInt(second, 10);
    
            if (isNaN(hour)) {
              hour = 0;
            }
            if (isNaN(minute)) {
              minute = 0;
            }
            if (isNaN(second)) {
              second = 0;
            }
    
            if (this.showMeridian) {
              if (hour < 1) {
                hour = 1;
              } else if (hour > 12) {
                hour = 12;
              }
            } else {
              if (hour >= 51) {
                hour = 50;
              } else if (hour < 0) {
                hour = 0;
              }
              if (hour < 13 && meridian === 'PM') {
                hour = hour + 12;
              }
            }
    
            if (minute < 0) {
              minute = 0;
            } else if (minute >= 60) {
              minute = 59;
            }
    
            if (this.showSeconds) {
              if (isNaN(second)) {
                second = 0;
              } else if (second < 0) {
                second = 0;
              } else if (second >= 60) {
                second = 59;
              }
            }
          }
    
          this.hour = hour;
          this.minute = minute;
          this.second = second;
          this.meridian = meridian;
    
          this.update(ignoreWidget);
        },
      }); 
    }
    

    其余部分使用普通的
    时间选择器

    这是一个标准的日期时间选择器,因此它显示标准的日期和时间格式及其选择。如果您想要完全不同的数字选择,那么只需使用日期选择器,并使用单独的下拉列表显示所需的小时值。如果您只希望一个日期时间选择器具有此功能,该怎么办在视图上?其余部分应显示默认小时数?
    var timePickerEx = TimePickerEx();