1

Mon code javascript comme ceci:Comment puis-je ajouter un minimum de jours en fonction de l'heure dans datetimepicker?

$(function() {  
    $('#datepicker').datetimepicker({ 
    minDate: moment().startOf('day') 
    }).on('dp.change', function(e){ 
    if(e.date && e.date.isSame(moment(), 'd')){ 
     var min = moment().startOf('minute').add(300, 'm'); 
     $('#timepicker').data("DateTimePicker").minDate(min); 
    } else { 
     $('#timepicker').data("DateTimePicker").minDate(false); 
    } 
    }); 

    $('#timepicker').datetimepicker({ 
    minDate: moment().startOf('minute').add(300, 'm'), 
    }); 
}); 

Demo et code complet comme celui-ci: https://jsfiddle.net/tyvetr5h/

Mon problème:

Par exemple maintenant le 16 Août à 21 heures. Comme il semble que la date affichée est le 17 août à 2 heures du matin. Mais mon code est le 16 août à 2 heures

Comment puis-je le résoudre?

J'essaie de mettre à jour le jour comme celui-ci:

minDate: moment().startOf('day').add(300, 'm') 

Mais il est le même

Répondre

1

Vous devez ajouter les 300 minutes au DP mindate lors de l'instanciation aussi. Puisque ce "moment" est l'heure et la date actuelles, cela est pertinent pour l'ajouter.

Je ne suis pas le même fuseau horaire que vous, j'ai donc dû ajouter plus de 300 minutes pour le faire tomber demain ... Mais voici votre updated Fiddle. J'ai enlevé tous les .startOf(), ce qui je pense est hors de propos dans ce que vous essayez d'atteindre.

EDIT
J'ai trouvé l'astuce.

La chose est que vous modifiez la valeur de moment ... donc quand il est temps de comparer les dates, mieux de le faire dans le « format Unix », qui est en millisecondes depuis janvier 1970 ... 1er

Ce nombre entier ne se soucie pas du changement de jour. Il est donc plus facile (et à l'épreuve des erreurs) de comparer si le temps est de 300 minutes à partir de maintenant.

$(function() { 

    console.clear(); 

    $('#datepicker').datetimepicker({ 
    minDate: moment().add(300, 'm').startOf("day") 
    }) 
    .val(moment().add(300, 'm').format("DD-MM-YYYY")) // To set correct "valid" date from start 

    .on('dp.change', function(e){ 
    var now = moment().format("X"); 
    //console.log(e.date.format("X")); 
    //console.log(now); 

    // Comparing selected date (moment object) in milliseconds 
    if(e.date.format("X")+(300*60*1000) > now){ 
     console.log("above 5 hours, unlocking time."); 
     $('#timepicker').data("DateTimePicker").minDate(false); 
    }else{ 
     console.log("below 5 hours, locking time (and probably resetting the value to min...)"); 
     $('#timepicker').data("DateTimePicker").minDate(moment().add(300, 'm')); 
    } 

    }); 

    $('#timepicker').datetimepicker({ 
    minDate: moment().add(300, 'm'), 
    }); 
}); 

CodePen

+0

TimePicker ne peut être sélectionné au moins 5 heures à partir de maintenant. L'utilisateur ne peut donc pas décrémenter les heures. Votre code, l'utilisateur peut encore décrémenter les heures –

+0

Je ne comprends pas ce que vous voulez dire ... Dans le violon que j'ai posté, l'utilisateur ne peut simplement pas sélectionner une date/heure en dessous du minimum fixé. –

+0

Si premier chargement puis choisissez timepicker, cela fonctionne. l'utilisateur ne peut pas décrémenter les heures. Mais si l'utilisateur sélectionne datepicker puis sélectionne timepicker, il peut décrémenter les heures –