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

Har*_*M V 86 jquery jquery-ui datepicker uidatepicker jquery-ui-datepicker

我正在尝试使用UI日期选择器选择日期范围.

在from/to字段中,人们不应该能够查看或选择当天之前的日期.

这是我的代码:

$(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 );
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何禁用当前日期之前的日期.

Nic*_*tti 107

您必须创建一个新的日期对象,并将其设置为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);
    }
});
Run Code Online (Sandbox Code Playgroud)

编辑 - 从您的评论现在它按预期工作http://jsfiddle.net/nicolapeluchetti/dAyzq/1/

  • 我想实施一种方式,人们不应该选择已经过去的日期..就像昨天前一样等.只有从今天开始. (2认同)

小智 71

声明dateToday变量并使用Date()函数来设置它..然后使用该变量分配给minDate,这是datepicker的参数.

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

就是这样......上面的回答真的很有帮助......继续说吧......


小智 45

$('#datepicker-dep').datepicker({
    minDate: 0
});
Run Code Online (Sandbox Code Playgroud)

minDate:0 适合我.


小智 18

使用"minDate"选项限制最早的允许日期.值"0"表示今天(从今天起0天):

    $(document).ready(function () {
        $("#txtdate").datepicker({
            minDate: 0,
            // ...
        });
    });
Run Code Online (Sandbox Code Playgroud)

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


Pål*_*ver 7

只是为了补充:

如果您还需要阻止用户手动键入过去的日期,这是一种可能的解决方案.这就是我们最终做的事情(根据@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);
    }
});
Run Code Online (Sandbox Code Playgroud)

如果用户手动键入过去的日期,这样做的目的是将值更改为今天的日期.


小智 5

现场演示,尝试一下,

    $('#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);                             
     }
   });
Run Code Online (Sandbox Code Playgroud)


Sam*_*ghe 5

这是简单的方法

$('#datepicker').datepicker('setStartDate', new Date());
Run Code Online (Sandbox Code Playgroud)

我们也可以禁用未来的日子

$('#datepicker').datepicker('setEndDate', new Date());
Run Code Online (Sandbox Code Playgroud)


khe*_*ngz 5

通过设置startDate: new Date()

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