jQuery DateTime picker set MinDate dynamique

Je les gars j'utilise un datetimepicker par trentrichardson.com.

J'ai un formulaire avec deux champs de saisie : à partir de et à et je veux être en mesure de créer dynamiquement un minDate de mon champ "à", égale à la valeur de mon champ "de".

Je sais que je devrais utiliser une option beforShow mais je ne sais pas comment implémenter la fonction.

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

    beforeShow: customRange

});

ÉDITÉ / SOLUTION

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 ); 
} } 
22
demandé sur luca 2011-03-21 11:38:40

7 réponses

Vous pouvez définir et obtenir minDate dynamiquement avec setter et getter:

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

Expliqué ici

22
répondu felixsigl 2011-03-21 08:45:46

Si vous avez deux zones de texte avec les identifiants correspondants from et to et que vous voulez que le minDate de to soit la date sélectionnée de from, procédez comme suit:

$("#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();
14
répondu Tanvir 2013-11-15 20:53:25

Vous pouvezrestreindre la plage de sélecteur de dates .

Mais vous voulez définir cette plage lors de la création du datepicker sur le "from". I Je t'ai fait une démo ce qui semble fonctionner correctement pour autant que je comprenne la question.

3
répondu andyb 2011-03-21 09:11:31

Luca: un petit ajout à votre réponse...

En utilisant la fonction que vous avez suggérée, le composant time est ignoré la première fois que le datetimepicker est affiché. Si vous fermez le datetimepicker et le rouvrez à nouveau, le composant time réapparaît mystérieusement. Je ne suis pas tout à fait sûr de ce qui cause cela, mais il peut être corrigé avec un peu de hack:

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);
}
2
répondu Matt McDonald 2012-02-17 05:14:22

Il y a un Exemple sur trentrichardson.com. ils utilisent "onSelect". Pour moi, il ne fonctionne pas perfert. Lorsque vous définissez minDate ou MaxDate, le composant time est défini sur 0 et seule la date reste. Et j'ai dû résoudre certains problèmes de localisation.

0
répondu uli78 2012-01-23 10:10:35

Aucune des réponses ci-dessus ne m'a aidé du tout. Cela n'a pas fonctionné ou a donné une sorte d'erreur.

Donc je les ai tous fusionnés et j'ai fait le mien. J'ai utilisé moment.js comme mentionné ci-dessus, il suffit de le télécharger et de l'inclure dans votre page.

$("#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'
});

Je suis sûr qu'il y a une meilleure façon de le faire, mais je ne pouvais pas le trouver. J'espère donc que cela aidera quelqu'un à l'avenir.

0
répondu Chris 2015-09-30 12:40:25

Cela a fonctionné pour moi

<input type="date" name="cname" value=""  min="<?php echo date("Y-m-d") ?>"/>
0
répondu Raghuram db 2018-06-28 05:05:45