Ограничить дату в jquery datepicker на основе другого datepicker или текстового поля
У меня есть два текстовых поля с подключенным дампикером. Текстовые поля предназначены для даты начала и окончания. Первый datepicker настроен так, что пользователь не может выбрать дату до сегодняшнего дня, но может выбрать любую дату в будущем.
Как настроить второй дампинг, чтобы он не мог выбрать дату до даты, выбранной в первом выборе даты? Например: если сегодня 12/11/10, и я выбираю 12/15/10 в первом datepicker, то второй выбор даты не должен выбирать ничего до 12/15/10.
Вот что я до сих пор:
$("#txtStartDate").datepicker({ minDate: 0 });
$("#txtEndDate").datepicker({});
Ответы
Ответ 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,
});