【问题标题】:eonasdan bootstrap datetimepicker minDate with exception for some past dateseonasdan bootstrap datetimepicker minDate 过去的一些日期除外
【发布时间】:2020-06-05 09:58:51
【问题描述】:

我想禁用除某些(至少一个)之外的过去日期,这是因为我的表单不允许选择过去的日期,但是当我重新加载包含现有数据的表单时,我需要在日期选择器中显示该日期,但由于我禁用了过去的日期,如果正在加载的数据是过去的日期,它只是默认为今天的日期。

$("#datepicker").datetimepicker({
 format: "YYYY-MM-DD, ddd",
 showClear: true,
 disabledDates: ["2020-06-03"],
 enabledDates: ["2020-06-04"],
 minDate: new Date(),
});

我一直在尝试使用disabledDatesenabledDatesminDate 三个选项,如果我添加minDate,它只会禁用过去的日期并忽略我的enabledDates。如果没有disabledDatesenabledDates 似乎无法工作,我收到一条错误消息“未捕获尝试 31 次以找到有效日期”,我是否可以选择仅使用 disabledDates 禁用过去的日期?创建包含过去日期的数组的最佳解决方案是什么,以便我可以将其放入disabledDates

【问题讨论】:

    标签: jquery eonasdan-datetimepicker


    【解决方案1】:

    我遇到了这种情况;问题是en/disabled dates take precedence over each other and over min/maxDate

    如果您的合格日期范围不那么开放,您可以全押enabledDates,如in this answer

    我的项目包含 datetimepicker 作为 js 文件,所以我最终添加了一个新选项,alwaysEnabledDate

    第一次发帖,所以这是我最好的解释我是如何做到的,完全在bootstrap-datetimepicker.js

    1. isValid 定义下,targetMoment.isValid() 检查之后和disabledDatesenabledDates 等检查之前:
    if (options.alwaysEnabledDate && targetMoment.isSame(moment(options.alwaysEnabledDate), granularity)) {
        return true;
    }
    
    1. 在以$.fn.datetimepicker.defaults = {开头的行后,添加:alwaysEnabledDate: false,,例如:
    $.fn.datetimepicker.defaults = {
        alwaysEnabledDate: false,
        // ... existing code
    }
    
    1. 在标题为“公共 API 函数”的区域下(您可以看到 picker.togglepicker.showpicker.ignoreReadOnly 等的定义):
    picker.alwaysEnabledDate = function (alwaysEnabledDate) {
        if (arguments.length === 0) {
            return options.alwaysEnabledDate ? options.alwaysEnabledDate.clone() : options.alwaysEnabledDate;
        }
    
        if ((typeof alwaysEnabledDate === 'boolean') && alwaysEnabledDate === false) {
            options.alwaysEnabledDate = false;
            update();
            return picker;
        }
    
        if (typeof alwaysEnabledDate === 'string') {
            if (alwaysEnabledDate === 'now' || alwaysEnabledDate === 'moment') {
                alwaysEnabledDate = getMoment();
            }
        }
    
        var parsedDate = parseInputDate(alwaysEnabledDate);
    
        if (!parsedDate.isValid()) {
            throw new TypeError('alwaysEnabledDate() Could not parse date parameter: ' + alwaysEnabledDate);
        }
    
        options.alwaysEnabledDate = parsedDate;
        update();
        return picker;
    };
    

    鉴于上述更改,您的用法将是:

    $("#datepicker").datetimepicker({
     format: "YYYY-MM-DD, ddd",
     showClear: true,
     alwaysEnabledDate: '2020-06-04',
     minDate: new Date()
    });
    

    In this screenshot,我已使用 6/12 的 minDate 和 6/3 的 alwaysEnabledDate 进行初始化。

    (警告:我只用day粒度测试过这种方法)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多