jQuery datepicker防止过时的日期


76

如何禁用jQuery datepicker上的过去日期?我在寻找选项,但似乎找不到任何能禁用过去日期的功能。

更新:感谢您的快速反应。我没有运气尝试过。日子仍然没有像我期望的那样变灰,仍然接受所选的过去日期。

我尝试了这个:

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

不起作用

我尝试了这个:

$('#datepicker').datepicker({ minDate: new Date() });

仍然不起作用。

它可以很好地显示日历小部件。它只是不会变灰或阻止过去几天的输入。过去我一直没有尝试过minDate和maxDate,所以我认为它一定不是它们。

Answers:



37

您只需要指定一个最小日期-将其设置为0意味着最小日期是从今天(即今天)开始的0天。您可以'0d'改为传递字符串(默认单位是天)。

$(function () {
    $('#date').datepicker({ minDate: 0 });
});

26

如果您要处理以前绑定的日期选择器,请设置

$("#datepicker").datepicker({ minDate: 0 });

不管用。该语法仅在创建窗口小部件时适用。

要为绑定日期选择器设置最小日期,请使用以下命令:

$("#datePicker").datepicker("option", "minDate", 0);

1
谢谢。我浪费了很长时间找到这种解决方案,这解决了我的问题。
乳山

24

删除周围的引号0,它将起作用。

工作代码段:

// set minDate to 0 for today's date
$('#datepicker').datepicker({ minDate: 0 });
body {
    font-size: 12px; /* just so that it doesn't default to 16px (which is kinda huge) */
}
<!-- load jQuery and jQuery UI -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/jquery-ui.min.js"></script>

<!-- load jQuery UI CSS theme -->
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.11.4/themes/smoothness/jquery-ui.css">

<!-- the datepicker input -->
<input type='text' id='datepicker' placeholder='Select date' />


1
为什么需要逗号有什么解释?我可以删除它,并且一切仍然可以正常运行。是否有一些浏览器要求单个属性对象使用逗号?
schickm 2012年

仅在使用多个选项时才需要逗号,例如$('#datepicker').datepicker({ minDate: 0, maxDate: "+1M +10D", dateFormat: 'yy-mm-dd' });,在最后一个选项之后不需要逗号
Tanvir

1
您正在向该方法发送对象。最后一个值的逗号不正确。
Brian Noah

逗号不是必需的,它在某些浏览器中破坏您的代码(已删除逗号)
iConnor 2014年




9

//禁用将来的日期

$('#datetimepicker1').datetimepicker({
            format: 'DD-MM-YYYY',
            maxDate: new Date
        }); 

//禁用过去的日期

 $('#datetimepicker2').datetimepicker({
        format: 'DD-MM-YYYY',
        minDate: new Date
    });

我不确定这个答案为什么会被否决,因为它的解决方案对我有用,而使用的可接受的解决方案会0导致JavaScript错误。+1
Sheridan


3

我正在使用以下代码格式化日期并在日历中显示2个月...

<script>
$(function() {

    var dates = $( "#from, #to" ).datepicker({

        showOn: "button",
        buttonImage: "imgs/calendar-month.png",
        buttonImageOnly: true,                           
        defaultDate: "+1w",
        changeMonth: true,
        numberOfMonths: 2,

        onSelect: function( selectedDate ) {




            $( ".selector" ).datepicker({ defaultDate: +7 });
            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", "dateFormat", 'yy-mm-dd' );


        }
    });
});

</script>

问题是我不确定如何限制以前的日期选择。


2

确保将多个属性放在同一行中(因为只显示了1行代码,所以您可能遇到了与我相同的问题)。

我会设置默认日期,但不会将旧日期设为灰色。这不起作用:

$('#date_end').datepicker({ defaultDate: +31 })
$('#date_end').datepicker({ minDate: 1 })

两者都可以:

$('#date_end').datepicker({ defaultDate: +31, minDate: 1 })

1和+1的工作方式相同(或您的情况下为0和+0)。

我:Windows 7 x64,Rails 3.2.3,Ruby 1.9.3


2
var givenStartDate = $('#startDate').val();
        alert('START DATE'+givenStartDate);
        var givenEndDate = $('#endDate').val();
        alert('END DATE'+givenEndDate);
        var date = new Date();
        var month = date.getMonth()+1;
        var day = date.getDate();
        var currentDate = date.getFullYear() + '-' +
            (month<10 ? '0' : '') + month + '-' +
            (day<10 ? '0' : '') + day;
        if(givenStartDate < currentDate || givenEndDate < currentDate)
         { 
        $("#updateButton").attr("disabled","disabled"); 
         }
         if(givenStartDate < currentDate && givenEndDate > currentDate)
            {
            $("#updateButton").attr("enabled","enabled");
            }
         if(givenStartDate > currentDate || givenEndDate > currentDate) { 
        $("#updateButton").attr("enabled","enabled"); 
         }

试试这个。如果有任何错误,请纠正我:)谢谢。


2

这应该工作 <input type="text" id="datepicker">

var dateToday = new Date();
$("#datepicker").datepicker({
    minDate: dateToday,
    onSelect: function(selectedDate) {
    var option = this.id == "datepicker" ? "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);
    }
});

1

尝试将startDate日期设置为当前日期。例如:

$('.date-pick').datePicker({startDate:'01/01/1996'});

这看起来像是凯文·勒克(Kevin Luck)的日期选择器,而不是标准的JQuery之一
salonMonsters 2011年

1

我使用了min属性: min="' + (new Date()).toISOString().substring(0,10) + '"

这是我的代码,它有效。

<input type="date" min="' + (new Date()).toISOString().substring(0,10) + '" id="' + invdateId + '" value="' + d.Invoice.Invoice_Date__c + '"/>

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.