2 votes

jQuery - DateTimePicker - Rendre le temps nécessaire pour supprimer l'heure actuelle

J'utilise donc jQuery DateTimePicker, actuellement j'ai les paramètres suivants :

  jQuery(document).ready(function($) {

    jQuery.datetimepicker.setLocale('en');

    jQuery('#datepicker').datetimepicker({
        beforeShowDay: $.datepicker.noWeekends,
        format: 'd/m/Y H:i a',
        minDate: 0,             
        minTime: 0,
        step: "30",
         allowTimes:[
          '09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30',
          '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00'
         ]              
    });         

  });

Comme vous pouvez le voir, vous ne pouvez pas sélectionner une date ou une heure dans le passé et la sélection de l'heure n'est que de 9 à 17 heures les jours de semaine...

Le problème que je rencontre est le suivant : si je sélectionne simplement la date du jour, la date et l'horodatage actuel s'affichent. Il faut que j'arrondisse à l'incrément de 30 minutes suivant ou que la sélection de l'heure soit requise en plus de la date.

Des idées ?

2voto

nsilva Points 1656

Ok, j'ai réussi à trouver une solution à la fin, voici le code mis à jour :

J'ai également apporté d'autres modifications afin que la date du jour ne soit pas sélectionnable si elle se trouve en dehors de l'intervalle de confiance. allowTimes .

Puisqu'il indique également l'heure actuelle, je l'ai également configuré de manière à ce que si vous sélectionnez une date dans le futur, l'heure sera réglée sur '09:00', qui est la première heure disponible dans l'intervalle de temps. allowTimes :

    var checkPastTime = function(currentDateTime) {

    var d = new Date();
    var todayDate = d.getDate();

    if (currentDateTime.getDate() == todayDate) { // check today date
        this.setOptions({               
            minTime: d.getHours() + '1:00' //here pass current time hour                        ;
        });
    } else
        this.setOptions({
            minTime: false
        });

    if(currentDateTime.getDate() == todayDate && d.getHours() >= 17) {
        this.setOptions({               
            minDate:'+1970/01/02',
            minTime: '09:00',
            defaultTime: '09:00'
        });     
    }   

    };

  jQuery(document).ready(function($) {

    jQuery.datetimepicker.setLocale('en'); 

    var d = new Date();
    var todayDate = d.getDate();

    if(todayDate == d.getDay() + 1) {
        var ahead = d.getHours() + 1;
    } else {
        var ahead = '9';
    }

    jQuery('#datepicker').datetimepicker({
        //beforeShowDay: $.datepicker.noWeekends,
        format: 'd/m/Y H:i a',
        minDate: 0, 
        onChangeDateTime: checkPastTime,
        onShow: checkPastTime, 
        defaultTime: ahead + ':00',
        step: "30",
         allowTimes:[
          '09:00', '09:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30',
          '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00'
         ]              
    });         

  });

0voto

step Points 900

Utilisez ce code :

var currentDate = new Date();
var minutes = currentDate.getMinutes();
var m = (Math.ceil(minutes/30) * 30) % 60;
currentDate.setMinutes(m);

et ensuite mettre currentDate dans votre afficheur de date comme defaultDate ou une méthode setDate

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X