how to disable future dates based on some datepicker value in jquery datepicker

13,663

Solution 1

Based on suggestions by @Mahesh Sapkal I made following changes to my code.

var dateToday = new Date();
var dates = $("#start_date, #end_date").datepicker({
    dateFormat: 'yy-mm-dd',
    minDate: dateToday,
    onSelect: function(selectedDate) {
          var option = this.id == "start_date" ? "minDate" : "maxDate",
          instance = $(this).data("datepicker"),
          date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);
          if(this.id == "start_date"){
                   $("#publishing_date").datepicker({
                         dateFormat: 'yy-mm-dd',
                         minDate: dateToday,
                         maxDate: date
                    });
          }
          if(this.id == 'end_date'){
                   $("#departure_date").datepicker({
                         dateFormat: 'yy-mm-dd',
                         minDate: date
                   })
          }
          dates.not(this).datepicker("option", option, date);
     }

}); Don't know why but his suggestion of $( "#departure_date" ).datepicker( "option", "minDate",date ); isn't working for me.

Solution 2

try this

 $("#start_date").datepicker({
dateFormat: 'dd-mm-yy',
minDate: "+0D",
onSelect: function (selectedDate) {
    var d = parseInt(selectedDate.substring(0, 2));
    var m = parseInt(selectedDate.substring(3, 5));
    var y = parseInt(selectedDate.substring(6, 10));
    var newDate = new Date(y, m - 1, d + 1);
    $("#departure_date").datepicker("option", "minDate", newDate);
}
});

$("#departure_date").datepicker({
dateFormat: 'dd-mm-yy',
minDate: "+0D",
onSelect: function (selectedDate) {
    var d = parseInt(selectedDate.substring(0, 2));
    var m = parseInt(selectedDate.substring(3, 5));
    var y = parseInt(selectedDate.substring(6, 10));
    var newDate = new Date(y, m - 1, d + 1);
    $("#publishing_date").datepicker("option", "minDate", newDate);
   }
 });

Solution 3

You need to set the departure_date & publishing_date after initialization.

Try this.

 onSelect: function(selectedDate) {
        var option = this.id == "start_date" ? "minDate" : "maxDate",
        instance = $(this).data("datepicker"),
        date = $.datepicker.parseDate(instance.settings.dateFormat || $.datepicker._defaults.dateFormat, selectedDate, instance.settings);

        if(this.id === "end_date") {
            $( "#departure_date" ).datepicker( "option", "minDate",date );
        } else {
            $( "#publishing_date" ).datepicker( "option", "maxDate",date );
        }

    }
Share:
13,663
samjhana joshi
Author by

samjhana joshi

PHP website developer,enjoys working with different websites with varying requirements.

Updated on June 24, 2022

Comments

  • samjhana joshi
    samjhana joshi almost 2 years

    I am using jquery datepicker and I have 4 dates:start_date,end_date,publishing_date and departure_date.Here based on start_date I want to disable future dates upto start_date and similarly based on end_date I want to disable past dates from end date. I am not able to do so, tried many option as onSelect but I just can't get the required disabling.Here is my jquery code.

    var dateToday = new Date();
    var dates = $("#start_date, #end_date").datepicker({
        dateFormat: 'yy-mm-dd',
        minDate: dateToday,
        onSelect: function(selectedDate) {
            var option = this.id == "start_date" ? "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);
        }
    });
    
    $('#departure_date').datepicker({
        dateFormat: 'yy-mm-dd',
        minDate: $('#end_date').datepicker({
            dateFormat: 'dd-mm-yy'
        }).val()
    });
    
    $('#publishing_date').datepicker({
        dateFormat: 'yy-mm-dd',
        maxDate: $('#start_date').datepicker({
            dateFormat: 'dd-mm-yy'
        }).val()
    });
    

    Any suggestions/help is welcome.Thanks in advance.

    Also tried using as follows but to no avail.

    $('#publishing_date').datepicker({
        dateFormat: 'yy-mm-dd',
        maxDate : ($.datepicker.formatDate('yy-mm-dd', $('#start_date').datepicker("getDate")))
    });