Soyez le premier à donner votre avis sur cette source.
Snippet vu 12 298 fois - Téléchargée 18 fois
<?php class Calendrier { var $moisFR = Array( 1 => "Janvier", 2 => "Février", 3 => "Mars", 4 => "Avril", 5 => "Mai", 6 => "Juin", 7 => "Juillet", 8 => "Août", 9 => "Septembre", 10 => "Octobre", 11 => "Novembre", 12 => "Décembre" ); var $annee; var $mois; var $convertDate; var $premierJour; var $nombreJour; var $debutPremiereLigne; var $finPremiereLigne; var $autreLigne; //Constructor function Calendrier(){ $this ->tabDateSee = Array(); $this->cssTable = 'border: 1px solid gray; padding:2px; margin: 5px; float:left; font-family: arial; font-size: 11px; text-align: center; background: #fafafa;'; $this->cssTDDays = 'background: #dfdfdf; font-weight: bold'; $this->cssTD = 'border: 1px solid gray; '; $this->cssTDSee = 'border: 1px solid gray; background: pink;'; } function creeCalendrier($choixAnnee,$choixMois) { if ($choixAnnee != "") $this->annee = $choixAnnee; if ($choixMois != "") $this->mois = $choixMois; $this->convertDate = gregoriantojd($this->mois,1,$this->annee); $this->premierJour = jddayofweek($this->convertDate,3)-1; $this->nombreJour = cal_days_in_month(1,$this->mois,$this->annee); if ($this->premierJour == -1) $this->premierJour = 6; for($i=0;$i<$this->premierJour;$i++){ $this->debutPremiereLigne .= "<td> </td>"; } /* echo '<pre>'; print_r($this->tabDateSee); echo '</pre>'; */ for($i=0;$i<(7-$this->premierJour);$i++){ $caseencours = $this->annee.'-'.$this->mois.'-'.($i+1); // echo $caseencours.'<br />-'; //on teste si la case en cours est dans le tableau des dates a afficher if (in_array ($caseencours, array_values($this->tabDateSee)) ){ $cssSee = true; // echo 'true<br>'; } else { $cssSee = false; // echo 'false<br>'; } $this->finPremiereLigne .= '<td'; if ($cssSee==true) { $this->finPremiereLigne .= ' style="'.$this->cssTDSee.'" '; } else { $this->finPremiereLigne .= ' style="'.$this->cssTD.'" '; } $this->finPremiereLigne .= '>'.($i+1)."</td>"; } $i2=0; for($i = (7-$this->premierJour);$i < $this->nombreJour;$i++){ $caseencours = $this->annee.'-'.$this->mois.'-'.($i+1); // echo $caseencours.'<br />'; //on teste si la case en cours est dans le tableau des dates a afficher // print_r($this->tabDateSee); if (in_array ($caseencours, array_values($this->tabDateSee)) ){ $cssSee = true; // echo 'true<br>'; } else { $cssSee = false; // echo 'false<br>'; } if($i2 == 7){ $this->autreLigne .= "</tr><tr>"; $i2 = 0; } $this->autreLigne .= '<td'; if ($cssSee==true) { $this->autreLigne .= ' style="'.$this->cssTDSee.'" '; }else { $this->autreLigne .= ' style="'.$this->cssTD.'" '; } $this->autreLigne .= '>'.($i+1).'</td>'; $i2++; } } //crée ou ajoute des valeurs de dates a un tableau qui vas servir à stocker les dates à mettre en couleur sur le cal function addDateSee ($dateDeb, $dateFin='0000-00-00') { //si pas de date de debut on sort if ($dateDeb == "") {return false; break;} else { //si pas de date de fin if ($dateFin=='0000-00-00') { //on add juste la date de debut au tableau $this->tabDateSee[] = $dateDeb; } else { //on calcule toutes les dates entre les deux dates et on add $tabtempsee = $this->clacDateInter ($dateDeb, $dateFin); $this->tabDateSee = array_merge($this->tabDateSee,$tabtempsee); } } } function clacDateInter ($dateDeb, $dateFin) { if ($dateDeb == "" or $dateFin=="") {return false; break;} else { //on considere qu'il y a 31j par mois vu que l'affichage sera géré par l'autre fonction on s'en fout en fait list($yeard,$monthd, $dayd ) = split('[/.-]', $dateDeb); list($yearf,$monthf, $dayf) = split('[/.-]', $dateFin); // echo 'debut : '.$monthd.'-'.$dayd.'-'.$yeard.'<br />'; // echo 'fin : '.$monthf.'-'.$dayf.'-'.$yearf.'<br />'; //boucle pr les années for ($i = $yeard; $i<=$yearf; $i++) { // echo '<br>année : '.$i.' , '; //boucles pour les mois //si le l'année est celle la date de fin if ($i == $yearf ) { $limitm = $monthf;} else { $limitm=12; } for ($j = $monthd; $j<=$limitm; $j++) { // echo '<br>mois : '.$j.' , '; //boucle pour les jours //on cherche la limite //si le mois et l'année sont ceux e la date de fin if ($i == $yearf && $j==$monthf) { $limitd = $dayf;} else { $limitd=31; } for ($h = $dayd; $h<=$limitd; $h++) { // echo 'jour : '.$h.' , '; $temptab [] = $i.'-'.$j.'-'.$h ; } //on réinitialise le jour à 1 pour la deuxieme boucle et les suivantes $dayd = 1; } //on réinitialise le mois à 1 pour la deuxieme boucle et les suivantes $monthd = 1; } /* echo '<pre>aaaa'; print_r ($temptab); echo '</pre>'; */ return ($temptab); } } function afficherCalendrier() { echo ' <table style="'.$this->cssTable.'"> <tr> <td colspan="7">[ <a href="?month='.$this->mois.'" target="_self">'.$this->moisFR[$this->mois].'</a> ]</td> </tr> <tr style="'.$this->cssTDDays.'"> <td>L</td> <td>M</td> <td>M</td> <td>J</td> <td>V</td> <td>S</td> <td>D</td> </tr> '; echo '<tr>'; echo $this->debutPremiereLigne; echo $this->finPremiereLigne; echo '</tr>'; echo '<tr>'; echo $this->autreLigne; echo '</tr>'; echo '</table>'; } } ?> <?php $cal = new Calendrier(); $cal->addDateSee('2008-8-5'); $cal->addDateSee('2008-8-9'); $cal->addDateSee('2008-8-6', '2008-8-31'); $cal->creeCalendrier("2008","8"); //$cal->clacDateInter('2008-08-03', '2009-08-10'); //print_r ($cal); $cal->afficherCalendrier(); $cal2 = new Calendrier(); $cal2->addDateSee('2008-9-5'); $cal2->addDateSee('2008-9-14', '2008-11-10'); $cal2->creeCalendrier("2008","9"); //$cal->clacDateInter('2008-08-03', '2009-08-10'); //print_r ($cal); $cal2->afficherCalendrier(); ?>
20 déc. 2007 à 22:08
http://www.phpcs.com/codes/PERIODICITE-EVENEMENT_31246.aspx
un bou de code que j'ai developpé
pour determiner la date de debut d'un evenement
exemple : Tous les premiers mercredi de aout pendant 5jours (c'est la date de debut des fetes de bayonne)
ca retournera la date pour chaque année
et aussi la date de fin
combiner a ta class ca fait un truc sympa
si le code entier te tente fait moi signe....
11 oct. 2007 à 12:57
et je voudrais m'en servir mais comment changer les dates et mettre des dates au format francais ???? pour les intervalles ?????? merci :-)
27 sept. 2007 à 21:33
Juste une petite question: comment afficher en rouge des dates chevauchant sur 2 mois différents? Pas trouvé la façon de faire... oups.
Merci
11 sept. 2007 à 09:38
11 sept. 2007 à 09:37
http://www.phpcs.com/codes/CLASSE-CALENDRIER-OPTIMISEE-POO_38032.aspx
@+
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.