JQuery Date Picker - отключить прошлые даты - PullRequest
84 голосов
/ 02 декабря 2011

Я пытаюсь выбрать диапазон дат с помощью средства выбора даты в пользовательском интерфейсе.

в поле «От / до» люди не должны иметь возможность просматривать или выбирать даты, предшествующие настоящему дню.1004 * Это мой код:

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

Может кто-нибудь сказать мне, как отключить даты, предшествующие текущей дате.

Ответы [ 15 ]

104 голосов
/ 02 декабря 2011

Вы должны создать новый объект даты и установить его как 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/

68 голосов
/ 02 апреля 2012

Объявите переменную dateToday и используйте функцию Date () для ее установки. затем используйте эту переменную, чтобы назначить minDate, который является параметром datepicker.

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

Вот и все ... Приведенный выше ответ был действительно полезным ... так держать, ребята ..

45 голосов
/ 15 октября 2013
$('#datepicker-dep').datepicker({
    minDate: 0
});

minDate:0 у меня работает.

17 голосов
/ 27 февраля 2016

Используйте параметр «minDate», чтобы ограничить максимально раннюю разрешенную дату. Значение «0» означает сегодня (0 дней с сегодняшнего дня):

    $(document).ready(function () {
        $("#txtdate").datepicker({
            minDate: 0,
            // ...
        });
    });

Документы здесь: http://api.jqueryui.com/datepicker/#option-minDate

7 голосов
/ 14 мая 2014

Просто добавьте к этому:

Если вам также необходимо запретить пользователю вручную вводить дату в прошлом, это возможное решение.Это то, что мы в итоге сделали (основываясь на ответе @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);
    }
});

Что нужно сделать, это изменить значение на сегодняшнюю дату, если пользователь вручную вводит дату в прошлом.

4 голосов
/ 29 декабря 2016

Это простой способ сделать это

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

, также мы можем отключить будущие дни

$('#datepicker').datepicker('setEndDate', new Date());
4 голосов
/ 11 июля 2014

Live Demo , попробуйте это,

    $('#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);                             
     }
   });
2 голосов
/ 10 декабря 2015

просто замените ваш код:

старый код:

$("#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 голосов
/ 21 апреля 2015
Атрибут

" mindate " должен использоваться для отключения прошедших дат в jquery datepicker.

minDate: new Date () Или minDate: ключ «0» для этого.

Ex:

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

OR

$(function() {
  $( "#datepicker" ).datepicker({minDate: 0});
});
2 голосов
/ 16 сентября 2013

Документация по jQuery API - указатель даты

Минимальная выбираемая дата.Если установлено значение null, минимальное значение отсутствует.

Поддерживается несколько типов:

Дата: Объект даты, содержащий минимальную дату.
Число: Количество дней с сегодняшнего дня.Например, 2 представляет two days с сегодняшнего дня, а -1 представляет yesterday.
String: Строка в формате, заданном параметром dateFormat, или относительная дата.
Относительные даты должны содержать пары значений и периодов;допустимые периоды: y для years, m для months, w для weeks и d для days.Например, +1m +7d представляет one month and seven days из today.

Чтобы не отображать предыдущие даты, отличные от сегодняшних

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