begin process at 2012 05 27 22:00:59
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Date / Heure

 > CALENDRIER ANNUEL AVEC NUMÉRO DE SEMAINE

CALENDRIER ANNUEL AVEC NUMÉRO DE SEMAINE


 Information sur la source

Note :
Aucune note
Catégorie :Date / Heure Classé sous :calendrier, semaine, numéro, année Niveau :Débutant Date de création :09/08/2010 Date de mise à jour :25/08/2010 16:27:12 Vu :12 605

Auteur : LGGillou

Ecrire un message privé
Commentaire sur cette source (9)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Code permettant d'afficher le calendrier annuel avec affichage du numéro de semaine (ISO-8601, >= PHP 5.20).

Les weekend sont aussi affichés.

Ce code a été écrit en un peu moins d'une heure, mais je pense qu'il est tout de même assez clair (fin, c'est à vous de juger).

N'hésitez pas à le commenter.

Démo: http://vbc3.com/calendrier.php

Source

  • <?php
  • // Recuperation des parametres (lors du changement d'annees)
  • if(isset($_POST["year"])) { // Recuperation des parametres POST pour le formulaire
  • $year = $_POST["year"];
  • }
  • elseif(isset($_GET["year"])) { // Recuperation des parametres GET pour les liens vers les annees precedentes et suivantes
  • $year = $_GET["year"];
  • }
  • else { // sinon on applique l'annee en cours
  • $newDate = New DateTime();
  • $year = $newDate->format("Y");
  • }
  • // mise en memoire des jours de la semaine et des mois de l'annee dans un tableau
  • $aDayOfWeek = array("Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim");
  • $aMonth = array("Janvier", "F&eacute;vrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Ao&ucirc;t", "Septembre", "Octobre", "Novembre", "D&eacute;cembre");
  • // creation d'une date temporaire en fonction du parametre annee recu
  • $newDate = New DateTime();
  • $newDate->setDate($year, 1, 1);
  • if ($newDate->format("L") == 1) { // si l'annee est bissextile, mise en memoire des nombres de jours par mois de l'annee (avec 29 a fevrier)
  • $aMonthDays = array("31", "29", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
  • }
  • else { // sinon, mise en memoire des nombres de jours par mois de l'annee (avec 28 a fevrier)
  • $aMonthDays = array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
  • }
  • ?>
  • <html>
  • <head>
  • <title>Calendrier <?php echo $year; // Affichage de l'annee ?></title>
  • <style type="text/css">
  • <!--
  • #calendar {padding:0; margin:0; border-top:1px solid black; border-left:1px solid black; border-right:1px solid black;}
  • #calendar th {border:1px solid black; border-bottom:2px solid black}
  • #calendar td {padding-left:3px; padding-right:3px}
  • #calendar td.dayOfWeek {border-left:1px solid black;}
  • #calendar td.day {text-align: right;}
  • #calendar td.week {border-right:1px solid black; font-weight:bold;}
  • #calendar td.endOfMonth {border-bottom:2px solid black;}
  • #calendar .weekend{background-color : #CCC;}
  • -->
  • </style>
  • </head>
  • <body>
  • <center>
  • <h2>Calendrier <?php echo $year;// Affichage de l'annee ?></h2>
  • <table id="calendar" cellpadding="0" cellspacing="0" border="0">
  • <thead>
  • <tr>
  • <?php for ($m=0; $m<12; $m++) { // Creation d'une boucle pour ecrire les entetes de colonnes ?>
  • <th colspan="3"><?php echo $aMonth[$m]; // Ecriture du nom du mois ?></th>
  • <?php } ?>
  • </tr>
  • </thead>
  • <tbody>
  • <?php for ($d=1; $d<=31; $d++) { // Creation d'une boucle pour realiser les lignes ?>
  • <tr>
  • <?php for ($m=0; $m<12; $m++) { // Creation d'une boucle pour ecrire les colonnes
  • $newDate = New DateTime(); // Creation d'une date pour obtenir le numero du jour de la semaine et le numero de semaine
  • $newDate->setDate($year, ($m+1), $d);
  • $dayOfWeek = $newDate->format("N")-1; // Recuperation du numero du jour de la semaine (0 à 6)
  • $weekend = ((($dayOfWeek==5 or $dayOfWeek==6) and $d <= $aMonthDays[$m])?" weekend":""); // Si le jour est un samedi ou dimanche et compris dans le mois, mise en memoire du mot weekend (classe css)
  • $endOfMonth = (($d==31)?" endOfMonth":""); // Si dernier jour du mois, mise en memoire du mot endOfWeek (classe css)
  • if ($d <= $aMonthDays[$m]) { // Si le jour est compris dans le mois en cours ?>
  • <!--// Ajout des classes css predefinis et affichage du jour de la semaine dans la premiere colonne -->
  • <td class="dayOfWeek<?php echo $weekend.$endOfMonth;?>"><?php echo $aDayOfWeek[$dayOfWeek]; ?></td>
  • <!--// Ajout des classes css predefinis et affichage du numero du jour du mois-->
  • <td class="day<?php echo $weekend.$endOfMonth;?>"><?php echo $d; ?></td>
  • <!--// Ajout des classes css predefinis et affichage en debut de semaine ou premier jour de l'annee du numero de semaine -->
  • <td class="week<?php echo $weekend.$endOfMonth;?>"><?php echo (($dayOfWeek==0 or ($d==1 and $m==0))?$newDate->format("W"):"&nbsp;");?></td>
  • <?php } else { // Si le jour n'est pas compris dans le mois (le 31 n'existe pas en fevrier) ?>
  • <!--// Ajout des classes css predefinis et ajout d'un espace pour que la cellule soit affichee correctement -->
  • <td class="dayOfWeek<?php echo $weekend.$endOfMonth;?>" colspan="2">&nbsp;</td>
  • <td class="week<?php echo $weekend.$endOfMonth;?>">&nbsp;</td>
  • <?php } } ?>
  • </tr>
  • <?php } ?>
  • </tbody>
  • </table>
  • <br />
  • <!--// Liens vers cette meme page avec le parametre annee pointant vers l'annee precedente et suivante -->
  • <a href="<?php echo $_SERVER["PHP_SELF"]?>?year=<?php echo $year-1;?>">Ann&eacute;e pr&eacute;c&eacute;dente</a>&nbsp;&nbsp;&nbsp;
  • <a href="<?php echo $_SERVER["PHP_SELF"]?>?year=<?php echo $year+1;?>">Ann&eacute;e suivante</a>
  • <br />
  • <br />
  • <!--// Creation d'un formulaire pour la saisie de l'annee qui retourne vers cette meme page -->
  • <form action="<?php echo $_SERVER["PHP_SELF"]?>" method="POST">
  • Ann&eacute;e :&nbsp;
  • <input name="year" value="<?php echo $year;?>" />
  • <input type="submit" value="Appliquer" />
  • </form>
  • </center>
  • </body>
  • </html>
<?php
	// Recuperation des parametres (lors du changement d'annees)
	if(isset($_POST["year"])) { // Recuperation des parametres POST pour le formulaire
		$year = $_POST["year"];
	}
	elseif(isset($_GET["year"])) { // Recuperation des parametres GET pour les liens vers les annees precedentes et suivantes
		$year = $_GET["year"];
	}
	else { // sinon on applique l'annee en cours
		$newDate = New DateTime();
		$year = $newDate->format("Y");
	}
	
	// mise en memoire des jours de la semaine et des mois de l'annee dans un tableau
	$aDayOfWeek = array("Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim");
	$aMonth = array("Janvier", "F&eacute;vrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Ao&ucirc;t", "Septembre", "Octobre", "Novembre", "D&eacute;cembre");
	
	// creation d'une date temporaire en fonction du parametre annee recu
	$newDate = New DateTime();
	$newDate->setDate($year, 1, 1);
	if ($newDate->format("L") == 1) { // si l'annee est bissextile, mise en memoire des nombres de jours par mois de l'annee (avec 29 a fevrier)
		$aMonthDays = array("31", "29", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
	}
	else { // sinon, mise en memoire des nombres de jours par mois de l'annee (avec 28 a fevrier)
		$aMonthDays = array("31", "28", "31", "30", "31", "30", "31", "31", "30", "31", "30", "31");
	}
?>
<html>
	<head>
		<title>Calendrier <?php echo $year; // Affichage de l'annee ?></title>
		<style type="text/css">
			<!--
				#calendar {padding:0; margin:0; border-top:1px solid black; border-left:1px solid black; border-right:1px solid black;}
				#calendar th {border:1px solid black; border-bottom:2px solid black}
				#calendar td {padding-left:3px; padding-right:3px}
				#calendar td.dayOfWeek {border-left:1px solid black;}
				#calendar td.day {text-align: right;}
				#calendar td.week {border-right:1px solid black; font-weight:bold;}
				#calendar td.endOfMonth {border-bottom:2px solid black;}
				#calendar .weekend{background-color : #CCC;}
			-->
		</style>
	</head>
	<body>
		<center>
			<h2>Calendrier <?php echo $year;// Affichage de l'annee ?></h2>
			<table id="calendar" cellpadding="0" cellspacing="0" border="0">
				<thead>
					<tr>
						<?php for ($m=0; $m<12; $m++) { // Creation d'une boucle pour ecrire les entetes de colonnes ?>
						<th colspan="3"><?php echo $aMonth[$m]; // Ecriture du nom du mois ?></th>
						<?php } ?>
					</tr>
				</thead>
				<tbody>
					<?php for ($d=1; $d<=31; $d++) { // Creation d'une boucle pour realiser les lignes ?>
					<tr>
						<?php for ($m=0; $m<12; $m++) { // Creation d'une boucle pour ecrire les colonnes
							$newDate = New DateTime(); // Creation d'une date pour obtenir le numero du jour de la semaine et le numero de semaine
							$newDate->setDate($year, ($m+1), $d);
							$dayOfWeek = $newDate->format("N")-1; // Recuperation du numero du jour de la semaine (0 à 6)
							$weekend = ((($dayOfWeek==5 or $dayOfWeek==6) and $d <= $aMonthDays[$m])?" weekend":""); // Si le jour est un samedi ou dimanche et compris dans le mois, mise en memoire du mot weekend (classe css)
							$endOfMonth = (($d==31)?" endOfMonth":""); // Si dernier jour du mois, mise en memoire du mot endOfWeek (classe css)
							if ($d <= $aMonthDays[$m])  { // Si le jour est compris dans le mois en cours ?>
							
						<!--// Ajout des classes css predefinis et affichage du jour de la semaine dans la premiere colonne -->
						<td class="dayOfWeek<?php echo $weekend.$endOfMonth;?>"><?php echo $aDayOfWeek[$dayOfWeek]; ?></td>
						
						<!--// Ajout des classes css predefinis et affichage du numero du jour du mois-->
						<td class="day<?php echo $weekend.$endOfMonth;?>"><?php echo $d; ?></td>
						
						<!--// Ajout des classes css predefinis et affichage en debut de semaine ou premier jour de l'annee du numero de semaine -->
						<td class="week<?php echo $weekend.$endOfMonth;?>"><?php echo (($dayOfWeek==0 or ($d==1 and $m==0))?$newDate->format("W"):"&nbsp;");?></td>
						
						<?php } else { // Si le jour n'est pas compris dans le mois (le 31 n'existe pas en fevrier) ?>
						
						<!--// Ajout des classes css predefinis et ajout d'un espace pour que la cellule soit affichee correctement -->
						<td class="dayOfWeek<?php echo $weekend.$endOfMonth;?>" colspan="2">&nbsp;</td>
						<td class="week<?php echo $weekend.$endOfMonth;?>">&nbsp;</td>
						
						<?php } } ?>
					</tr>
					<?php } ?>
				</tbody>
			</table>
			<br />
			<!--// Liens vers cette meme page avec le parametre annee pointant vers l'annee precedente et suivante -->
			<a href="<?php echo $_SERVER["PHP_SELF"]?>?year=<?php echo $year-1;?>">Ann&eacute;e pr&eacute;c&eacute;dente</a>&nbsp;&nbsp;&nbsp;
			<a href="<?php echo $_SERVER["PHP_SELF"]?>?year=<?php echo $year+1;?>">Ann&eacute;e suivante</a>
			<br />
			<br />
			<!--// Creation d'un formulaire pour la saisie de l'annee qui retourne vers cette meme page -->
			<form action="<?php echo $_SERVER["PHP_SELF"]?>" method="POST">
				Ann&eacute;e :&nbsp;
				<input name="year" value="<?php echo $year;?>" />
				<input type="submit" value="Appliquer" />
			</form>
		</center>
	</body>
</html>



 Historique

09 août 2010 14:20:07 :
Ajout d'un lien vers l'année précédente et suivante
09 août 2010 15:49:38 :
Ajout du Get pour la réception des paramètres Ajout lien démo
09 août 2010 15:55:41 :
Correction pour les années bissextiles
15 août 2010 20:36:31 :
- Changement de la gestion des dates, utilisation de DateTime en lieu et place de date() - Modification css - Ajout de commentaires
15 août 2010 21:59:50 :
Nouvelle capture d'écran
15 août 2010 22:07:32 :
Correction couleur des cellules vides de fin de mois
25 août 2010 16:10:17 :
Correction problème de formatage de la date suivant le fuseau horaire
25 août 2010 16:27:12 :
Correction de la correction ^^ il y en a des bons!

 Sources de la même categorie

Source avec une capture AGENDA GRAPHIQUE SIMPLE (DÉBUTANT) À INTÉGRER par NicomakM
CALCUL DU NOMBRE DE JOURS CONTENUS DANS L'INTERSECTION DE DE... par curphey
CALENDRIER EN 70 LIGNES par tchconst
Source avec Zip CALENDRIER par gabay
CALENDRIER SIMPLE par manuche

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CALENDRIER RÉSERVATION POUR CHAMBRES D'HÔTES EN PHP MYSQL par oallais
Source avec une capture AGENDA GRAPHIQUE SIMPLE (DÉBUTANT) À INTÉGRER par NicomakM
Source avec Zip CALENDRIER par gabay
CALENDRIER PAR SEMAINE AVEC ACTIONS par Tourach
Source avec Zip Source avec une capture [CLASSE PHP] MINI CALENDRIER AVEC LES 12 MOIS AFFICHÉS par SAaD44

Commentaires et avis

Commentaire de jeca le 09/08/2010 16:33:47

Bonjour,

Tu aurais dû utiliser l'objet "DateTime" ; il permet de s'affranchir des limites de dates.
Un exemple trè basique :
<?php
  $date = New DateTime('1600-02-15');
  $date -> modify('+10 day');
  echo $date -> format('l d F Y');
?>

Commentaire de LGGillou le 09/08/2010 17:43:24

Salut, merci de ton commentaire, il est vrai que j'aurai pu le faire plus générique, mais bon il me semble que l'objet DateTime n'a ni la méthode pour retourner les années bissextiles, ni celle pour obtenir les numéros de semaines.
Donc à coder...
On verra pour le faire évoluer dans ce sens.

Commentaire de gillardg le 10/08/2010 10:47:33

salut ,
je viens de voir la démo , pas le code et je trouve que la présentation n'est pas top , un calendrier à toutes les colonnes de mêmes longueur ( bon ok c'est un détail )

Commentaire de barroidrissa le 10/08/2010 14:49:01

salut,votre script il est impecable,j'avais quelques chose a ajouter comme commentaire je sais pas comment mais si vous arrivez a l'integré ça sera un plus: si c'est possible d'ajouter les jours en une colonne juste a coté de janvier.merci encore il est best votre script!

Commentaire de jeca le 10/08/2010 15:50:40

=> LGGillou
La méthode "format" de l'objet "DateTime" utilise les mêmes paramètres que la fonction "date()".
Donc, en reprenant mon exemple précédent
$date -> format('L') retourne 1 (année bissextile)
$date -> format('W') retourne O8 (numéro de semaine)

Commentaire de LGGillou le 15/08/2010 21:56:44

=> JECA, merci de cette info, je l'ai donc mis à jour en suivant tes conseils.
=> GILLARDG, en effet, mais après c'est affaire de goût... Fin je l'ai modifié dans ce sens.
=> BARROIDRISSA, je ne suis pas sûr de comprendre ce que tu veux, est-ce quelque chose comme ça que tu veux: une colonne avec le mot janvier au milieu verticalement puis une colonne avec les jours et ainsi de suite pour les mois suivants?

Commentaire de barroidrissa le 16/08/2010 14:57:35

Salut LGGillou,
c'est en quelque sorte ça,mais au lieu de le faire pour tous les mois,ça sera la première colonne où on aura uniquement les jours avant d'en arrivé a la colonne janvier,fevrier etc.
je sais pas si je me fait comprendre.merci beaucoup!!!!

Commentaire de galanedgar le 16/08/2010 16:29:24

Bonjour LGGILLOU,

J'ai essayé ton code mais je n'arrive pas...
Je suis au canada donc mon ordi a été configuré selon la date d'Amérique Nord...

Voici le message d'erreur :

Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for '-4.0/DST' instead' in C:\inetpub\wwwroot\toto\test\test_calendrier.php:11 Stack trace: #0 C:\inetpub\wwwroot\toto\test\test_calendrier.php(11): DateTime->__construct() #1 {main} thrown in C:\inetpub\wwwroot\toto\test\test_calendrier.php on line 11


Alors il faut ajouter quelques choses pour que on peut rectifier les paramètres selon le pays
En définissant le décalage horaire par défaut de toutes les fonctions date/heure


//date_default_timezone_set('America/Montreal');
date_default_timezone_set('Europe/Paris');

Commentaire de LGGillou le 25/08/2010 17:22:48

=> GALANEDGAR, j'espère que cette modif corrige ton problème, si ce n'est pas le cas je rajouterai la sélection du fuseau horaire.

=> BARROIDRISSA
Dis moi si ça correspond à tes attentes :
[url]http://vbc3.com/script/calendrier2.zip[/url]

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Récupération d'un jour de la semaine [ par karfyn ] Bonjour a tous,J'ai besoin de r&#233;cup&#233;rer les date des jours de la semaine (jour ouvr&#233; : lunid, mardi, mercredi, jeudi et vendredi) en fo Conversion d'une date ... [ par chamallow ] Bonjour ,Je voudrais savoir s'il existe un moyen en PHP pour convertir un numéro de semaine (numéro de semaine de l'année) en date. C'est-à-dire qu'av 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 numéro de semaine [ par brezoneg ] Bonsoir,Avec  :echo strftime ( 'Nous sommes le %A %d %B %Y semaine : %U' )J'obtiens :  Nous sommes le lundi 04 février 2008 semaine : 05Alors que le n Recherche des mois avec les N° de semaine et l'année [ par brezoneg ] Bonjour et joyeuses fêtes à tous. Je voudrais récupérer le nom du mois sachant que je n'ai que la semaine et l'année. Je sais qu' une semaine peut êtr problème avec ereg() [ par brezoneg ] Problème avec ereg() J'utilise la fonction ereg() pour trier des expressions du style semaine(année) Ex : 02(08) la semaine 2 de l'année 2008 Avec rendre la liste de mois et année d'un calendrier naviguable [ par layaleMou ] Bonjour J'ai mon calendrier avec en haut deux liste celle des mois et l'autre des années le problème c'est qu'elles sont pas navigable. si quelqu'un Numéro de la semaine [ par destiny ] Bonjour,J'aimerai savoir si une function existe pour connaitre le numéro de la semaine suivant une date X (peu importe le format) ? Et par la meme tro Problème php date (navigation à la semaine) [ par tobeybboy ] Bonjour, Je suis en train de réaliser une page sur laquelle l'utilisateur pourra effectuer une navigation à la semaine, par un système d'onglets. J'ai Demande d'aide pour réalisation d'un calendrier [ par Brabus18 ] bonjour, voila j'ai réalisé un calendrier en php grave a différents codes-source que j'ai trouvé sur le web.Voila mon problème, je voudrai que lorsque


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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,421 sec (3)

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