Выбор даты и времени в jquery - PullRequest
23 голосов
/ 21 марта 2011

Ребята, я использую datetimepicker от trentrichardson.com.

У меня есть форма с двумя полями ввода: от и до , и я хочубыть в состоянии динамически устанавливать minDate для моего поля «to», равное значению моего поля «from».

Я знаю, что должен использовать опцию beforShow, но не знаю, как реализовать функцию.

$('.from,.to').datetimepicker({

    beforeShow: customRange

});

ИЗДАНО / РЕШЕНИЕ

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

Ответы [ 8 ]

26 голосов
/ 21 марта 2011

вы можете установить и получить minDate динамически с помощью сеттера и геттера:

//getter
var minDate = $( ".selector" ).datepicker( "option", "minDate" );
//setter
$( ".selector" ).datepicker( "option", "minDate", new Date(2007, 1 - 1, 1) );

объяснено здесь

16 голосов
/ 16 ноября 2013

Если у вас есть два текстовых поля с соответствующими идентификаторами from и to, и вы хотите, чтобы minDate из 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 голосов
/ 21 марта 2011

Вы можете ограничить диапазон выбора даты .

Но вы хотите установить этот диапазон при создании указателя даты на "from". Я сделал вам демо , которое, кажется, работает нормально, насколько я понимаю вопрос.

2 голосов
/ 17 февраля 2012

luca: небольшое дополнение к вашему ответу ...

Используя предложенную вами функцию, компонент времени игнорируется при первом отображении выбора даты и времени.Если вы закроете указатель даты и снова откроете его, компонент времени загадочным образом снова появится.Я не совсем уверен, что является причиной этого, но это можно исправить с помощью небольшого взлома:

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);
}
0 голосов
/ 18 марта 2019

В jQuery UI datepicker есть много функций, которые помогают динамически устанавливать minDate или maxDate, например onSelect, onClose.

демо onClose уже предоставлено в ответе @ Tanvir, см. Здесь: datepicker onClose пример

Итак, я приведу вам пример onSelect.

перед этим я сообщу вам разницу между onSelect и onclose, поскольку Name предлагает onSelect срабатывать сразу после того, как пользователь выбирает дату, и onClose срабатывать, когда указатель даты закрывается после выбора даты, вот и все.

здесь у нас есть два указателя даты pickupdate1 и pickupdate2, и мы хотим установить выбранную дату pickupdate1 равной minDate pickupdate2 и должна быть динамической , вот код:

$("#pickupdate1").datepicker({
    dateFormat: "dd-mm-yy",
    onSelect: function (selectedDate) {                                           
         $('#pickupdate2').datepicker('option', 'minDate', selectedDate);
    }
});
$("#pickupdate2").datepicker({
   dateFormat: "dd-mm-yy",
});
0 голосов
/ 28 июня 2018

Это сработало для меня

<input type="date" name="cname" value=""  min="<?php echo date("Y-m-d") ?>"/>
0 голосов
/ 30 сентября 2015

Ни один из приведенных ответов не помог мне вообще.Это либо не сработало, либо выдало какую-то ошибку.

Так что я объединил их все вместе и сделал свой собственный.Я использовал 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'
});

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

0 голосов
/ 23 января 2012

На trentrichardson.com есть пример . Они используют «onSelect». Для меня это не работает Perfert. При установке minDate или MaxDate компонент времени устанавливается на 0, и остается только дата. И мне пришлось решить некоторые проблемы с локализацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...