begin process at 2010 03 21 02:13:13
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

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

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


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

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

Auteur : caviar

Ecrire un message privé
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-CA LENDRIER-AVEC-12-MOIS-AFFICHES_34299.aspx


 Sources du même auteur

GÉNÉRATEUR DE LISTE DÉROULANTE
GOOGLE SEARCH PARSER
CONNAITRE LE NOMBRE DE PAGES INDEXÉES SUR GOOGLE
Source avec Zip Source avec une capture FONCTION RÉCURSIVE POUR GÉNÉRER UNE ARBORESCENCE DE FICHIERS...
GÉNÉRATEUR DE CONTENU

 Sources de la même categorie

FORMATER DES MILLISECONDES AU FORMAT HH:MM:SS:MMM par lcef
Source avec Zip CLASSE DATETIME AVEC TRADUCTION par 1030
DIFFÉRENCE ENTRE DEUX DATE EN JOURS (LISTE RÉCUPÉRÉE DANS UN... par DevilTN
Source avec Zip Source avec une capture CALENDRIER + AGENDA TRÈS SIMPLE (GERER LES JOURS FÉRIÉS ET L... par mondherclubiste
Source avec une capture CALENDRIER DES RÉSERVATIONS EN PHP par mathieubond

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CALENDRIER + AGENDA TRÈS SIMPLE (GERER LES JOURS FÉRIÉS ET L... par mondherclubiste
Source avec Zip Source avec une capture CALENDRIER par pichpoich
CALCUL SIMPLE DU NOMBRE DE JOURS OUVRÉS ENTRE DEUX DATES (JO... par Astemius
Source avec Zip Source avec une capture GÉNÉRATEUR D'IMAGES GIF AFFICHANT UN CALENDRIER TYPE FEUILLE... par webrunner
Source avec Zip Source avec une capture CALENDIER EN PHP5 ET DHTML par lariflette77

Commentaires et avis

Commentaire de kylekatarnls le 04/09/2007 10:35:51

Excellente source 10/10

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.

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

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à ?

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
@+

Commentaire de caviar le 11/09/2007 09:38:03

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

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

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 :-)

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

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales