Une classe que j'ai trouvé ici et enrichier pour l'adapter à mes besoins. en gros j'ai ajouté la possibilité de faire apparaitre certains jours en surbrillance sur le calendrier.... bref tout est dans la classe, commenté et tout avec un exemple en fin de fichier
@+
Source / Exemple :
<?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();
?>
Conclusion :
La classe de base
http://www.phpcs.com/codes/CLASSE-PHP-MINI-CALENDRIER-AVEC-12-MOIS-AFFICHES_34299.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.