jQuery Date Picker - отключить прошлые даты

89

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

в поле от / до люди не должны иметь возможность просматривать или выбирать даты, предшествующие сегодняшнему дню.

Это мой код:

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

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

Харша М.В.
источник

Ответы:

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 при инициализации
датпикеров
Вы можете добавить showAnim:"",в настройки datepicker, чтобы убрать раздражающую смену месяца и года, когда вы делаете свой выбор.
Misiu
Я использовал ваш скрипт, но получаю сообщение об ошибке «Uncaught ReferenceError: $ is not defined». как я это исправлю?
Мейбл Джордж
@NicolaPeluchetti Это именно то, что мне нужно, но можно ли это использовать в asp: Textbox? Я пробовал, но он не работает. Есть ли какие-то конкретные изменения, которые мне следует сделать? Заранее
спасибо
74

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

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

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

Сачин
источник
Ясный и прямой ответ .. Спасибо
ASD
47
$('#datepicker-dep').datepicker({
    minDate: 0
});

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

Рия Трэвел
источник
20

Используйте опцию 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);
    }
});

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

ПолОливер
источник
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

установите атрибут startDate для datepicker, он работает, ниже рабочий код

$(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параметром, или относительная дата.
Относительные даты должны содержать пары значений и периода; действительные периоды yдля years, mдля months, wдля weeksи dдля days. Например, +1m +7dпредставляет one month and seven daysиз today.

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

$('#datepicker').datepicker({minDate: 0});
Мохаммад Фейсал
источник
2

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

minDate: new 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
});
user5663780
источник
2

Установив startDate: new Date()

$('.date-picker').datepicker({
    defaultDate: "+1w",
    changeMonth: true,
    numberOfMonths: 1,
    ...
    startDate: new Date(),
});
кхенгз
источник
1

Я создал функцию для отключения предыдущей даты, отключения гибких выходных дней (например, суббота, воскресенье)

Мы используем метод beforeShowDay плагина jQuery UI datepicker.

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

введите описание изображения здесь

Сегодня 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)
    });
})
hoga98
источник
0
$( "#date" ).datetimepicker({startDate:new Date()}).datetimepicker('update', new Date());

new Date(): функция получить сегодняшнюю дату предыдущая дата заблокирована. 100% рабочий

Мухаммад Усман Насир
источник
0

вы можете просто использовать

startDate: 'today'

он отлично работает для меня.

Моаз Атик
источник