Jquery datetime picker set minDate dynamic
Я, ребята, я использую datetimepicker от trentrichardson.com.
У меня есть форма с двумя полями ввода: от и до, и я хочу иметь возможность динамически устанавливать minDate в поле "to", равное значению моего поля "from".
Я знаю, что должен использовать опцию beforShow, но не знаю, как реализовать эту функцию.
$('.from,.to').datetimepicker({
beforeShow: customRange
});
EDITED/РЕШЕНИЕ
function customRange(input) {
if (input.id == 'to') {
var x=$('#from').datepicker("getDate");
$( ".to" ).datepicker( "option", "minDate",x );
}
else if (input.id == 'from') {
var x=$('#to').datepicker("getDate");
$( ".from" ).datepicker( "option", "maxDate",x );
} }
Ответы
Ответ 1
вы можете установить и получить minDate динамически с помощью setter и getter:
//getter
var minDate = $( ".selector" ).datepicker( "option", "minDate" );
//setter
$( ".selector" ).datepicker( "option", "minDate", new Date(2007, 1 - 1, 1) );
здесь
Ответ 2
Если у вас есть два текстовых поля с соответствующими идентификаторами from
и to
, и вы хотите, чтобы minDate
of to
выбрана дата from
, выполните следующие действия:
$("#from").datepicker({
minDate: 0, // to disable past dates (skip if not needed)
onClose: function(selectedDate) {
// Set the minDate of 'to' as the selectedDate of 'from'
$("#to").datepicker("option", "minDate", selectedDate);
}
});
$("#to").datepicker();
Ответ 3
Вы можете ограничить диапазон дат.
Но вы хотите установить этот диапазон при создании datepicker на "from". Я сделал вам демо, который, кажется, работает нормально, насколько я понимаю вопрос.
Ответ 4
luca: небольшое дополнение к вашему ответу...
Используя функцию, которую вы предложили, компонент времени игнорируется при первом отображении datetimepicker. Если вы закроете datetimepicker и снова откроете его снова, компонент времени загадочно появится снова. Я не совсем уверен, что это вызывает, но это может быть исправлено с помощью взлома:
function setMinMaxDate ( element )
{
// Store current date - setting max/min date seems to destroy time component
var val = $(element).val();
if (element.id == 'endDate')
{
var x=$('#startDate').datetimepicker("getDate");
$( element ).datetimepicker( "option", "minDate",x );
}
else if (element.id == 'startDate')
{
var x=$('#endDate').datetimepicker("getDate");
$( element ).datetimepicker( "option", "maxDate",x );
}
// Restore date
$(element).val(val);
}
Ответ 5
На trentrichardson.com есть example. Они используют "onSelect". Для меня это не работает perfert. При установке minDate или MaxDate для компонента времени установлено значение 0 и остается только дата. И мне пришлось решить некоторые проблемы с локализацией.
Ответ 6
Ни один из вышеперечисленных ответов мне не помог. Он либо не работал, либо давал какую-то ошибку.
Итак, я объединил их все вместе и сделал свой собственный. Я использовал moment.js, как указано выше, просто загрузите его и включите в свою страницу.
$("#start_date").datetimepicker({
format: 'Y-m-d H:00:00',
onChangeDateTime: function(dp, $input){
var dt2 = $('#end_date');
var minDate = $('#start_date').val();
var currentDate = new Date();
var targetDate = moment(minDate).toDate();
var dateDifference = currentDate - targetDate;
var minLimitDate = moment(dateDifference).format('YYYY/MM/DD');
var endDate = moment(dt2.val()).toDate();
if((currentDate - endDate) >= (currentDate - targetDate))
dt2.datetimepicker({
'value': minDate
});
dt2.datetimepicker({
'minDate': '-'+minLimitDate
});
}
});
$("#end_date").datetimepicker({
format: 'Y-m-d H:00:00'
});
Я уверен, что есть лучший способ сделать это, но я не смог его найти. Поэтому я надеюсь, что это поможет кому-то в будущем.