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

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

Ответ 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();

Ответ 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'
});

Я уверен, что есть лучший способ сделать это, но я не смог его найти. Поэтому я надеюсь, что это поможет кому-то в будущем.