Voici le code source d'une fonction PHP qui affiche un calendrier dans votre page HTML. Il ne vous reste plus qu'à adapter le design avec un peu de CSS.
Les tabulations ne s'affichent pas dans le forum ;( Désolé.
<?PHP
/***************************************
*
* Affiche un calendrier mensuel
* sous forme d'un tableau
*
* $m = mois
* $y = année
*
****************************************/
function calendar ($m, $y)
{
$sem = array(6,0,1,2,3,4,5); // Correspondance des jours de la semaine : lundi = 0, dimanche = 6
$mois = array('','Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
$week = array('lu','ma','me','je','ve','sa','di');
$t = mktime(12, 0, 0, $m, 1, $y); // Timestamp du premier jour du mois
echo '<table><tbody>';
// Le mois
//--------
echo '<tr><td colspan="7">'.$mois[$m].'</td></tr>';
// Les jours de la semaine
//------------------------
echo '<tr>';
for ($i = 0 ; $i < 7 ; $i++)
{
echo '<td>'.$week[$i].'</td>';
}
echo '</tr>';
// Le calendrier
//--------------
for ($l = 0 ; $l < 6 ; $l++) // calendrier sur 6 lignes
{
echo '<tr>';
for ($i = 0 ; $i < 7 ; $i++) // 7 jours de la semaine
{
$w = $sem[(int)date('w',$t)]; // Jour de la semaine à traiter
$m2 = (int)date('n',$t); // Tant que le mois reste celui du départ
if (($w == $i) && ($m2 == $m)) // Si le jours de semaine et le mois correspondent
{
echo '<td>'.date('j',$t).'</td>'; // Affiche le jour du mois
$t += 86400; // Passe au jour suivant
}
else
{
echo '<td> </td>'; // Case vide
}
}
echo '</tr>';
}
echo '</tbody></table>';
}
?>
Psousennes
2 janvier 2020
Répondre
MP
Bonjour, même si je ne m'attends pas à une réponse vu que le post date de +2 ans, comment serait-il possible d'intégrer des boutons permettant de voir les mois suivant et précédent via ce calendrier ?
Merci pour l'éventuelle réponse si quelqu'un passe par ici.
Emmanuel
2 janvier 2020
Répondre
MP
@Psousennes : Pour faire un calendrier interactif il faudrait obligatoirement passer en Javascript. En PHP c'est le serveur qui crée le code HTML et l'envoie au client.
Si on ajoute des boutons, c'est le client qui devra générer son propre code HTML et donc forcément en javascript.
Un exemple de calendrier interactif en javascript : https://www.blogduwebdesign.com/blog/graphisme/inspiration-graphique/calendriers-html-javascript.html
Les tabulations ne s'affichent pas dans le forum ;( Désolé.
<?PHP
/***************************************
*
* Affiche un calendrier mensuel
* sous forme d'un tableau
*
* $m = mois
* $y = année
*
****************************************/
function calendar ($m, $y)
{
$sem = array(6,0,1,2,3,4,5); // Correspondance des jours de la semaine : lundi = 0, dimanche = 6
$mois = array('','Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
$week = array('lu','ma','me','je','ve','sa','di');
$t = mktime(12, 0, 0, $m, 1, $y); // Timestamp du premier jour du mois
echo '<table><tbody>';
// Le mois
//--------
echo '<tr><td colspan="7">'.$mois[$m].'</td></tr>';
// Les jours de la semaine
//------------------------
echo '<tr>';
for ($i = 0 ; $i < 7 ; $i++)
{
echo '<td>'.$week[$i].'</td>';
}
echo '</tr>';
// Le calendrier
//--------------
for ($l = 0 ; $l < 6 ; $l++) // calendrier sur 6 lignes
{
echo '<tr>';
for ($i = 0 ; $i < 7 ; $i++) // 7 jours de la semaine
{
$w = $sem[(int)date('w',$t)]; // Jour de la semaine à traiter
$m2 = (int)date('n',$t); // Tant que le mois reste celui du départ
if (($w == $i) && ($m2 == $m)) // Si le jours de semaine et le mois correspondent
{
echo '<td>'.date('j',$t).'</td>'; // Affiche le jour du mois
$t += 86400; // Passe au jour suivant
}
else
{
echo '<td> </td>'; // Case vide
}
}
echo '</tr>';
}
echo '</tbody></table>';
}
?>