jQuery Date Picker-禁用过去的日期


89

我正在尝试使用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 );
        }
    });
});

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

Answers:


112

您必须创建一个新的日期对象并将其设置为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 MV,

1
@HarshaMV我更新了我的答案,您应该在初始化日期选择器时设置minDate
Nicola Peluchetti

您可以添加showAnim:"",到日期选择器设置,以删除进行选择时烦人的月份和年份的更改。
Misiu 2012年

我使用了您的脚本,但出现错误“未捕获的ReferenceError:未定义$”。我该如何解决?
mable George

@NicolaPeluchetti这正是我所需要的,但是可以在asp:Textbox中使用吗?我尝试过但不起作用,是否应该做任何特定的更改?在此先感谢您
wolfQueen '17

74

声明dateToday变量并使用Date()函数进行设置。然后使用该变量分配给datePicker的参数minDate。

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

就这样...上面的答案真的很有帮助...继续保持下去..


明确而直接的答案..谢谢
ASD

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

minDate:0 为我工作。



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);
    }
});

如果用户手动键入过去的日期,这就是将值更改为今天的日期。


6

现场演示,尝试一下,

    $('#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);                             
     }
   });

5

这是简单的方法

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

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

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

1
谢谢!您停止了数小时的沮丧。
lmiguelvargasf

4

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

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

2

jQuery API文档-Datepicker

最小可选日期。设置为null,没有最小值。

支持多种类型:

日期:包含最小日期的日期对象。
数量:从今天开始的天数。例如2代表two days从今天和-1代表yesterday
字符串:采用dateFormat选项定义的格式的字符串或相对日期。
相对日期必须包含值和期间对;有效期间是yyearsmmonthswweeks,和ddays。例如,从+1m +7d代表。one month and seven daystoday

为了不显示除今天以外的以前的日期

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

2

应该使用“ mindate ”属性来禁用jquery datepicker中的传递日期。

minDate:新的Date()或minDate:“ 0”是此操作的键。

Ex:

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

要么

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

2

只需替换您的代码:

旧代码:

$("#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
});

2

通过设置 startDate: new Date()

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

1

我创建了禁用以前的日期,禁用灵活的周末(例如星期六,星期日)的功能

我们正在使用 jQuery UI datepicker插件的beforeShowDay方法。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
var NotBeforeToday = function(date) {
		var now = new Date(); //this gets the current date and time
		if (date.getFullYear() == now.getFullYear() && date.getMonth() == now.getMonth() && date.getDate() >= now.getDate() && (date.getDay() > 0 && date.getDay() < 6) )
			return [true,""];
		if (date.getFullYear() >= now.getFullYear() && date.getMonth() > now.getMonth() && (date.getDay() > 0 && date.getDay() < 6))
			return [true,""];
		if (date.getFullYear() > now.getFullYear() && (date.getDay() > 0 && date.getDay() < 6))
			return [true,""];
		return [false,""];
	}


jQuery("#datepicker").datepicker({
		beforeShowDay: NotBeforeToday
    });

在此处输入图片说明

今天的日期是9月15日。我已经禁用了星期六和星期日。


0

您必须像这样将变量声明为当前日期

 $(function() {
    var date = new Date();
    var currentMonth = date.getMonth();
    var currentDate = date.getDate();
    var currentYear = date.getFullYear();
    $('#datepicker').datepicker({
    minDate: new Date(currentYear, currentMonth, currentDate)
    });
})

0
$( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());

new Date():功能获取今天日期的前一个日期被锁定。100%工作


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.