Подтвердить что ты не робот

Ограничить дату в jquery datepicker на основе другого datepicker или текстового поля

У меня есть два текстовых поля с подключенным дампикером. Текстовые поля предназначены для даты начала и окончания. Первый datepicker настроен так, что пользователь не может выбрать дату до сегодняшнего дня, но может выбрать любую дату в будущем.

Как настроить второй дампинг, чтобы он не мог выбрать дату до даты, выбранной в первом выборе даты? Например: если сегодня 12/11/10, и я выбираю 12/15/10 в первом datepicker, то второй выбор даты не должен выбирать ничего до 12/15/10.

Вот что я до сих пор:

$("#txtStartDate").datepicker({ minDate: 0 });
$("#txtEndDate").datepicker({});
4b9b3361

Ответ 1

Например, в этом примере кода startDatePicker выбирается как 2010-12-12, событие изменения startDatePicker устанавливает minDate of endDatePicker 2010-12-13. Он блокирует ячейки до этой даты. Это образец того, о чем упоминал @Victor. Надеюсь, это поможет... С уважением... Озлем.

$("#startDatePicker").datepicker({ 
    dateFormat: 'yy-mm-dd',
    changeMonth: true,
    minDate: new Date(),
    maxDate: '+2y',
    onSelect: function(date){

        var selectedDate = new Date(date);
        var msecsInADay = 86400000;
        var endDate = new Date(selectedDate.getTime() + msecsInADay);

       //Set Minimum Date of EndDatePicker After Selected Date of StartDatePicker
        $("#endDatePicker").datepicker( "option", "minDate", endDate );
        $("#endDatePicker").datepicker( "option", "maxDate", '+2y' );

    }
});

$("#endDatePicker").datepicker({ 
    dateFormat: 'yy-mm-dd',
    changeMonth: true
});

Ответ 2

Update:

Приведенный выше подход устанавливает minDate только во время создания. Я использовал событие onSelect, чтобы изменить параметр minDate второго datepicker следующим образом:

$("#txtStartDate").datepicker({
  showOn: "both",       
  onSelect: function(dateText, inst){
     $("#txtEndDate").datepicker("option","minDate",
     $("#txtStartDate").datepicker("getDate"));
  }
});

Ответ 3

решение Tin Man работало для меня после добавления $( "# txtEndDate" ). datepicker() внизу

$("#txtStartDate").datepicker({
  showOn: "both",       
  onSelect: function(dateText, inst){
     $("#txtEndDate").datepicker("option","minDate",
     $("#txtStartDate").datepicker("getDate"));
  }
});

$("#txtEndDate").datepicker(); //it is not working with out this line

Ответ 4

С точки зрения чистого UI вы не должны. Если пользователь выбирает неправильный месяц для обоих датпикеров и пытается выбрать правильный месяц, у него 50% -ное изменение в нарушении пользовательского интерфейса. В идеале вы допустили бы неправильный выбор и отображали полезное сообщение об ошибке, указывающее, что дата окончания должна быть после даты окончания.

Если вы хотите реализовать свою идею: дайте каждому событию datepicker событие "change", которое соответствующим образом изменит параметры на другом datepicker.

Ответ 5

попробуйте этого человека:

$("#dateTo").datepicker({
    dateFormat: 'dd/mm/yy',
    changeMonth: true,
    changeYear: true,
    minDate:  new Date()
    }).datepicker("setDate", new Date());
$("#dateFrom").datepicker({
    dateFormat: 'dd/mm/yy',
    changeMonth: true,
    changeYear: true,
    onSelect: function(){
        $('#dateTo').datepicker('option', 'minDate', $("#dateFrom").datepicker("getDate"));
    }
    }).datepicker("setDate", new Date());

Ответ 6

Используйте метод "getDate" первого пользовательского интерфейса datepicker и передайте его в опцию minDate второго параметра datepicker:

$("#txtEndDate").datepicker({
    showOn: "both",
    minDate: $("#txtStartDate").datepicker("getDate")
});

Ответ 7

Используйте этот код:

<script type="text/javascript">
    $(function () {
        $("#txtStartDate").datepicker({
            dateFormat: 'dd/mm/yy',
            inline: true,
            minDate: 'dateToday'
        });
        $("#txtEndDate").datepicker({
            dateFormat: 'dd/mm/yy',
            inline: true,
             minDate: $("#txtStartDate").datepicker("getDate") });
        });
</script>

Ответ 8

 $startDateCtrl.change(function () {
            setMinEndDateValue($startDateCtrl, $endDateCtrl);
        });

 $endDateCtrl.datepicker(); 

У меня есть два выбора даты начала и конца. Дата окончания мин. И макс. Дата, которые мы устанавливаем на основе выбора с начала. Минимальная начальная дата выбора даты окончания - это начальная дата выбора пуска. Максимальная дата окончания выбора даты окончания выбирается из даты начала выбора + 7 дней.

function setMinEndDateValue($startDateCtrl, $endDateCtrl) {
            var $maxSchedulingDate = new Date(@MaxDate.Year, @MaxDate.Month -1, @MaxDate.Day );
            var $startDate = $startDateCtrl.val();
            var $selectedStartDate = new Date($startDate);
            $selectedStartDate.setDate($selectedStartDate.getDate() + 7); // increasing the start date by 7 days (End Date max)
            var $maxEndDate = new Date();
            if ($selectedStartDate > $maxSchedulingDate) {
                $maxEndDate = $maxSchedulingDate;
            }
            else {
                $maxEndDate = $selectedStartDate;
            }
            $endDateCtrl.datepicker("option", "minDate", $startDate);
            $endDateCtrl.datepicker("option", "maxDate", $maxEndDate);
        }

Ответ 9

Основываясь на предыдущих ответах в этой теме, я чувствовал, что решение, которое работает со значениями по умолчанию и повторно применяет минимальную и максимальную даты:

// Defaults
var defaultFromDate = new Date();
var defaultToDate = new Date();
defaultToDate.setMonth(defaultToDate.getMonth() + 1);

// To
$("#datepickerTo").datepicker({
  dateFormat: "yy-mm-dd",
  changeMonth: true,
  changeYear: true,
});
$("#datepickerTo").datepicker("setDate", defaultToDate);

function limitToDateSpan(currentFromDate) {
  $("#datepickerTo").datepicker("option", "minDate", currentFromDate);

  var maxDate = new Date(currentFromDate.getTime());
  maxDate.setFullYear(maxDate.getFullYear() + 1);

  $("#datepickerTo").datepicker("option", "maxDate", maxDate);
}

limitToDateSpan(defaultFromDate);

// From
$("#datepickerFrom").datepicker({
  dateFormat: "yy-mm-dd",
  changeMonth: true,
  changeYear: true,
  minDate: "2013-01-01",
  maxDate: "+1Y",
  onSelect: function (dateText) {
    limitToDateSpan(new Date(dateText));
  }
});
$("#datepickerFrom").datepicker("setDate", defaultFromDate);

Ответ 10

  $('#start_date').datepicker({
       endDate: new Date(),
       autoclose: true,
  }).on("changeDate", function (e) {
       $('#end_date').datepicker('setStartDate', e.date);
  });

  $('#end_date').datepicker({
      autoclose: true,
  });