Accueil > > > CALENDRIER ANNUEL AVEC NUMÉRO DE SEMAINE
CALENDRIER ANNUEL AVEC NUMÉRO DE SEMAINE
Information sur la source
Description
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évrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Dé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"):" ");?></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"> </td>
- <td class="week<?php echo $weekend.$endOfMonth;?>"> </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ée précédente</a>
- <a href="<?php echo $_SERVER["PHP_SELF"]?>?year=<?php echo $year+1;?>">Anné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ée :
- <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évrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Dé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"):" ");?></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"> </td>
<td class="week<?php echo $weekend.$endOfMonth;?>"> </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ée précédente</a>
<a href="<?php echo $_SERVER["PHP_SELF"]?>?year=<?php echo $year+1;?>">Anné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ée :
<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
Commentaires et avis
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écupérer les date des jours de la semaine (jour ouvré : 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
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
GOOGLE MAPGOOGLE MAP par fatmanajjar
Cliquez pour lire la suite par fatmanajjar
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|