jQuery日期选择器 - 禁用过去的日期

96

我正在尝试使用UI日期选择器来实现日期范围选择。

在起始/结束日期字段中,人们不应该能够查看或选择以前的日期。

这是我的代码:

$(function() {
    var dates = $( "#from, #to" ).datepicker({
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 1,
        onSelect: function( selectedDate ) {
            var option = this.id == "from" ? "minDate" : "maxDate",
                instance = $( this ).data( "datepicker" ),
                date = $.datepicker.parseDate(
                    instance.settings.dateFormat ||
                    $.datepicker._defaults.dateFormat,
                    selectedDate, instance.settings );
            dates.not( this ).datepicker( "option", option, date );
        }
    });
});

请问如何禁用早于当前日期的日期?

16个回答

127

在初始化日期选择器时,您必须创建一个新的日期对象并将其设置为minDate

<label for="from">From</label> <input type="text" id="from" name="from"/> <label for="to">to</label> <input type="text" id="to" name="to"/>

var dateToday = new Date();
var dates = $("#from, #to").datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 3,
    minDate: dateToday,
    onSelect: function(selectedDate) {
        var option = this.id == "from" ? "minDate" : "maxDate",
            instance = $(this).data("datepicker"),
            date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
        dates.not(this).datepicker("option", option, date);
    }
});

编辑 - 根据你的评论,现在它按预期工作了 http://jsfiddle.net/nicolapeluchetti/dAyzq/1/


2
我想实现一种方法,使人们无法选择过去的日期,比如昨天、前天等,只能从今天开始往后选择。 - Harsha M V
1
@HarshaMV 我更新了我的答案,你只需要在初始化日期选择器时设置minDate即可。 - Nicola Peluchetti
您可以在日期选择器设置中添加 showAnim: "",以消除在进行选择时出现的烦人的月份和年份更改。 - Misiu
我使用了你的脚本,但是出现了错误“Uncaught ReferenceError: $ is not defined”。我该如何解决这个问题? - mable george
@NicolaPeluchetti 这正是我所需要的,但这能在 asp:Textbox 中使用吗?我尝试了但它不起作用,我应该做出什么具体的更改吗?提前感谢您。 - wolfQueen
@wolfQueen 这有点取决于你的标记,理论上应该可以工作。 - Nicola Peluchetti

83

声明一个 nameToday 变量,并使用 Date() 函数对其进行设置。然后使用该变量分配给 datepicker 的参数 minDate。

var dateToday = new Date(); 
$(function() {
    $( "#datepicker" ).datepicker({
        numberOfMonths: 3,
        showButtonPanel: true,
        minDate: dateToday
    });
});

就是这样... 上面的回答真的很有帮助... 各位加油...


51
$('#datepicker-dep').datepicker({
    minDate: 0
});

minDate:0适用于我。


23
使用"minDate"选项来限制最早允许的日期。值"0"表示今天(距离今天0天):
    $(document).ready(function () {
        $("#txtdate").datepicker({
            minDate: 0,
            // ...
        });
    });

文档在这里:http://api.jqueryui.com/datepicker/#option-minDate


8

补充一下:

如果您还需要防止用户手动输入过去的日期,这是一个可能的解决方案。这就是我们最终采取的方法(基于@Nicola Peluchetti的答案)

var dateToday = new Date();

$("#myDatePickerInput").change(function () {
    var updatedDate = $(this).val();
    var instance = $(this).data("datepicker");
    var date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, updatedDate, instance.settings);

    if (date < dateToday) {
        $(this).datepicker("setDate", dateToday);
    }
});

这个功能的作用是,如果用户手动输入一个过去的日期,它会将该值更改为今天的日期。

7

演示页面,试试看。

    $('#from').datepicker(
     { 
        minDate: 0,
        beforeShow: function() {
        $(this).datepicker('option', 'maxDate', $('#to').val());
      }
   });
  $('#to').datepicker(
     {
        defaultDate: "+1w",
        beforeShow: function() {
        $(this).datepicker('option', 'minDate', $('#from').val());
        if ($('#from').val() === '') $(this).datepicker('option', 'minDate', 0);                             
     }
   });

7

这是一种简单的方法来实现这个

$('#datepicker').datepicker('setStartDate', new Date());

另外,我们可以禁用未来的日期。

$('#datepicker').datepicker('setEndDate', new Date());

5

通过设置 startDate: new Date()

$('.date-picker').datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 1,
    ...
    startDate: new Date(),
});

4

设置datepicker的startDate属性,它可以工作,以下是可行的代码:

$(function(){
$('#datepicker').datepicker({
    startDate: '-0m'
    //endDate: '+2d'
}).on('changeDate', function(ev){
    $('#sDate1').text($('#datepicker').data('date'));
    $('#datepicker').datepicker('hide');
});
})

3

仅需替换您的代码:

旧代码:

$("#dateSelect").datepicker({
    showOtherMonths: true,
    selectOtherMonths: true,
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'yy-mm-dd'

});

新代码:

$("#dateSelect").datepicker({
    showOtherMonths: true,
    selectOtherMonths: true,
    changeMonth: true,
    changeYear: true,
    showButtonPanel: true,
    dateFormat: 'yy-mm-dd',
    minDate: 0
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接