Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

CLASS CALENDRIER AVEC AFFICHAGE D'UN INTERVALE DE JOURS DÉFINIS EN SURBRILLANCE


Information sur la source

Catégorie :Date / Heure Classé sous : calendrier, surbrillance, date, intervale, class Niveau : Initié Date de création : 03/09/2007 Vu : 6 226

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

Description

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

  • <?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>&nbsp;</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();
  • ?>
<?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>&nbsp;</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

 

Commentaires et avis

signaler à un administrateur
Commentaire de kylekatarnls le 04/09/2007 10:35:51

Excellente source 10/10

signaler à un administrateur
Commentaire de depression le 04/09/2007 13:25:20

"Une classe que j'ai trouvé ici et enrichier pour l'adapter à mes besoins."

Ca fait un peu douteux je dois dire.

signaler à un administrateur
Commentaire de caviar le 05/09/2007 17:34:23

lool ... pourtant ça ne m'as pas trop énervé de faire ça ... lol lapsus ou coquille ? aussi si le "e" et le "r" n'étaient pas à côté sur le clavier :p

signaler à un administrateur
Commentaire de kylekatarnls le 08/09/2007 17:00:08

Peut-on savoir de qui est le code que tu as pris pour faire celui-là ?

signaler à un administrateur
Commentaire de caviar le 11/09/2007 09:37:07

tout part de là
http://www.phpcs.com/codes/CLASSE-CALENDRIER-OPTIMISEE-POO_38032.aspx
@+

signaler à un administrateur
Commentaire de caviar le 11/09/2007 09:38:03

c'était ecrit dans l'explication finale d'ailleurs :)... j'me disais aussi ^^

signaler à un administrateur
Commentaire de bidulette le 27/09/2007 21:33:25 10/10

Très sympa comme script, Merci beaucoup!

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

signaler à un administrateur
Commentaire de aquewel le 11/10/2007 12:57:18

Ton code est super !

et je voudrais m'en servir mais comment changer les dates et mettre des dates au format francais ???? pour les intervalles ?????? merci :-)

signaler à un administrateur
Commentaire de aquewel le 20/12/2007 22:08:44 10/10

je te propose de regarder ce code

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....

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Je trouve pas l'erreur sur mon script [ par Akash ] Salut à tous j'espère que vous pourrez m'aider. Voila le problème :Pour mon script de calendrier evenementiel j'ai besoin d'afficher des évènements pa problemes de lien dans un calendrier [ par hysteria74000 ] qulequ'un peut me dire pourquoi mes liens, dans mon calendrier, SUIVANT et PRECEDENT ne fonctionnent pas.Voici le code php::$lien=date("Y+m+d", mktime requette si posssible [ par youyou26 ] bonjour tt le monde je suis un peu despérer j'ai petit calendrier et un fichier ¤.gif et chaque image et enregistré avec une date ce quie j'ai envie c Gestion de date dans une BDD [ par switsh ] Bonjour, Je suis actuellement en train de cr&#233;er un calendrier rectiligne pour des r&#233;servations de chambres. Pour le moment j'ai le calendr news [ par tomm123456 ] bonjour et joyeuses fetes . voil&#224; j'ai un probleme de mise &#224; jour de news .Quand je veux modifier une news , il me renvoie bien les vale Calendrier pour gallerie photo [ par gandalf76fr ] Bonjour, ayant ma famille distante, je cr&#233;e une gallerie photos pour qu'il puisse voir ma fille grandire.Jusque la je l'ai fait sous photoweb gal Les dates avec MySQL [ par ImmortalPC ] Salut,je deviens fou avec mon calendrier J' ai une date de commencement et une date de finrespectivement : date_start et date_endLeur type : datetime Créer un calendrier qui renvoie sur une page html en fonction de la date [ par rellik77 ] Bonsoir à tous !Je cherche un code simple à mettre en place pour faire un calendrier annuel classique, qui permettrait à un utilisateur qui en cliquan communication entre deux page [ par mouness ] boujour j'ai un probleme et ce serait super si quelqu'un pouvai m'aider je m'explique. J'ai crée 2 frame l'un d'entre elle affiche un calendrier et l' calendrier sur une semaine [ par SataN_sTn ] Bonjour,Travaillant sur un calendrier sur une semaine qui reprendre des données dans une base mysql suivant les jours, heures etc, j'ai donc cherché l


Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.