2010-02-25 12 views
1

Ce que j'essaie de faire est grise quelques jours de la semaine pour un lieu pour quand il est fermé. Chaque site peut être fermé à différents jours.Utiliser beforeShowDay dans JQuery UI Datepicker pour fermer les jours de la semaine

je peux utiliser le code suivant comme un test pour fermer tous les dimanches:

$('#bookingDatepicker').datepicker({ 
       minDate: 0, 
       maxDate: '+3M', 
       dateFormat: 'DD, d MM, yy', 
       altField: '#actualDate', 
       altFormat: 'yy-mm-dd', 
       beforeShowDay: closedDays 
      }); 

function closedDays(date) { 
    if (date.getDay() == 0){ 
    return [false,"","Venue Closed"]; 
    } else { return [true, ""]; 
} 
} 

Cependant, je pourrais devoir fermer plus d'un jour et ils pourraient ne pas courir à côté de l'autre. Dans mon code de la base de données que je peux créer une chaîne, des exemples ci-dessous, qui montrent ce jour sont ouverts ...

1,2,3,4,5,6,0 //I would want to show no days closed 
2,3,4,5,6  //I would want to show Sunday (0) and Monday (1) closed 

Je ne sais pas quoi faire avec ce que pour obtenir le code ci-dessus pour travailler. J'utilise PHP pour créer la chaîne, donc je peux la manipuler en utilisant ça si besoin est.

EDIT

Comme d'habitude lorsque vous postez une question que vous obtenez une percée mineure! J'ai développé le code ci-dessous, cela fonctionne si j'utilise les données fictives, mais j'ai besoin de trouver un moyen d'envelopper mes valeurs de chaîne dans "". Cela est maintenant me causer des ennuis, si je viens d'utiliser var cloDays = [2,3,4,5] il cesse de travailler

var cloDays = ["2","3","4","5"]; 
function closedDays(date){ 
var sDate = date.getDay().toString(); 
if ($.inArray(sDate, cloDays) == -1) return [false,"","Venue Closed"]; 
else return [true, ""]; 
} 

Répondre

0

réussi à le réparer en exécutant ma chaîne à travers le code ci-dessous, il explose essentiellement dans un tableau PHP, puis l'encode en utilisant JSON_Encode. Semble fonctionner parfaitement:

$cloDays = json_encode(explode(",", $cloDays)); 
3

cet article n'a pas résolu mon problème mais m'a indiqué dans la bonne direction.

C'est ce qui a fonctionné comme je le voulais:

var unavailableDates = ["9-5-2011","10-5-2011"]; 

function unavailable(date) { 
    dmy = date.getDate() + "-" + (date.getMonth()+1) + "-" + date.getFullYear(); 
    if ($.inArray(dmy, unavailableDates) == -1) { 
     return [true, ""]; 
    } else { 
     return [false,"","Unavailable"]; 
    } 
} 

$('#iDate').datepicker({ minDate: +1, beforeShowDay: unavailable }); 

Cela bloque toutes les dates dans le passé, y compris aujourd'hui et bloque les dates indiquées dans le tableau unavailableDates.

Questions connexes