Automatiser un calendrier statique
Résolu/Fermé
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
-
3 mars 2019 à 09:44
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 3 mars 2019 à 17:49
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 3 mars 2019 à 17:49
A voir également:
- Automatiser un calendrier statique
- Calendrier partagé google - Guide
- Synchroniser calendrier outlook et gmail - Guide
- Déploiement tnt 4k calendrier - Accueil - TV & Vidéo
- Mon calendrier ovulation - Télécharger - Santé & Bien-être
- Calendrier 1582 - Télécharger - Bureautique
3 réponses
yg_be
Messages postés
23426
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
13 janvier 2025
Ambassadeur
1 557
Modifié le 3 mars 2019 à 10:39
Modifié le 3 mars 2019 à 10:39
bonjour, je pense que tu es sur la bonne piste:
- cal_days_in_month te donne le nombre de jours du mois
- tu peux utiliser
ensuite, pour remplir ton tableau, je pense qu'il est plus simple, au lieu des deux boucles en i et j, de faire une seule boucle sur k (les jours), et de modifier i (le numéro de ligne) et j (le numéro de colonne) au fur et à mesure.
- cal_days_in_month te donne le nombre de jours du mois
- tu peux utiliser
date('N', strtotime('first day of this month') )pour déterminer le jour de la semaine du premier jour du mois. Cela te permettra de déterminer le nombre de cases vides à ajouter au début.
ensuite, pour remplir ton tableau, je pense qu'il est plus simple, au lieu des deux boucles en i et j, de faire une seule boucle sur k (les jours), et de modifier i (le numéro de ligne) et j (le numéro de colonne) au fur et à mesure.
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
3 mars 2019 à 10:46
3 mars 2019 à 10:46
Bonjour,
Au lieu d'écrire à la main un array avec les "jours" du mois, tu peux le générer via une boucle allant de 1 jusqu'au dernier jour du mois.
Pour trouver ce jour...https://www.commentcamarche.net/faq/875-php-dernier-jour-du-mois-nombre-de-jours-dans-le-mois
Je te conseille également d'utiliser l'objet DateTime de php pour manipuler les dates.
Par exemple
Mais allons plus loin...
Pour ensuite pouvoir utiliser facilement les informations il faudrait pouvoir créer un "nouvel array" qui classerait les dates par semaine et qui t'indique le 'jour de la semaine' de chaque date...
Donc.. essaye ça :
Au lieu d'écrire à la main un array avec les "jours" du mois, tu peux le générer via une boucle allant de 1 jusqu'au dernier jour du mois.
Pour trouver ce jour...https://www.commentcamarche.net/faq/875-php-dernier-jour-du-mois-nombre-de-jours-dans-le-mois
Je te conseille également d'utiliser l'objet DateTime de php pour manipuler les dates.
Par exemple
$dateDeb = new DateTime('2006-01-01'); $dateFin = new DateTime(); $date = ''; while ($dateDeb -> format('Y-m-d') <= $dateFin -> format('Y-m-d')) { echo "<br>".$dateDeb -> format('Y-m-d') . "\n"; $dateDeb -> modify('+1 day'); }
Mais allons plus loin...
Pour ensuite pouvoir utiliser facilement les informations il faudrait pouvoir créer un "nouvel array" qui classerait les dates par semaine et qui t'indique le 'jour de la semaine' de chaque date...
Donc.. essaye ça :
$annee = 2019; $mois = 2; $dateDeb = new DateTime($annee.'-'.$mois.'-01'); //premier jour du mois $dateFin = new DateTime($dateDeb->format( 'Y-m-t' )); //dernier jour du mois $arrDates = array(); while ($dateDeb -> format('Y-m-d') <= $dateFin -> format('Y-m-d')) { $semaine = $dateDeb->format('W'); //numéro de semaine $jour = $dateDeb->format('N'); // numéro du jour $arrDates[$semaine][$jour] = $dateDeb -> format('Y-m-d') . "\n"; //on stocke la date dans l'array $dateDeb -> modify('+1 day'); // on incrémente la date pour continuer la boucle } echo "<pre>"; print_r($arrDates); echo "</pre>";
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
3 mars 2019 à 10:46
3 mars 2019 à 10:46
NB: A l'avenir, merci d'utiliser correctement les balises de code afin d'avoir, comme pour mon code, la coloration syntaxique.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
3 mars 2019 à 16:02
3 mars 2019 à 16:02
Merci pour vos réponses. Je sens que je touche au but concernant la boucle qui me permettrait d'obtenir automatiquement le nombre de jours du mois en cours mais je bloque sur comment intégrer le résultat de la boucle dans l'array.
<!--------------------> <!------- PARC -------> <!--------------------> <?php /* On déclare la $ qui retourne le jour en cours */ $jour = date('l'); /* On déclare la $ qui contient la liste des jours */ $liste_jours = array( 1 => 'Lundi', 2 => 'Mardi', 3 => 'Mercredi', 4 => 'Jeudi', 5 => 'Vendredi', 6 => 'Samedi', 7 => 'Dimanche' ); /* On déclare la $ qui retourne le mois en cours */ $mois = date('F'); /* On déclare la $ qui retourne l'année en cours */ $annee = date('Y'); /* On déclare la $ qui retourne le 1er jour du mois en cours */ $premier_jour = date($annee.'-'.date('n').'-01'); /* On déclare la $ qui retourne le nombre de jours du mois en cours */ $nombre_jours = cal_days_in_month(CAL_GREGORIAN, date('n'), $annee); /* On déclare la $ qui va comporter le nombre de numéros de jours du mois en cours */ $liste_numeros = array(); /* On déclare une boucle qui va incrémenter de 1 à partir du 1er jour jusqu'à atteindre le nombre de jours maximum du mois en cours puis qui va introduire le résultat dans la $liste_numero */ while ($premier_jour <= $nombre_jours) { $premier_jour++; } /* Nombre de colonnes du calendrier */ $nombre_colonnes = 7; /* Calcul du nombre de lignes nécessaires au calendrier pour pouvoir afficher tous les numéros des jours du mois demandé dans la variable $nombre_jours */ if (round($nombre_jours/$nombre_colonnes) != ($nombre_jours/$nombre_colonnes)) { $nombre_lignes = round(($nombre_jours/$nombre_colonnes)+0.5); } else { $nombre_lignes = $nombre_jours/$nombre_colonnes; } /* On déclare le format français pour convertir les jours et les mois en français */ setlocale( LC_ALL, 'fr_FR.UTF8', 'fr_FR', 'fr', 'fra', 'fr_FR@euro' ); ?> <ul> <li id="conteneur_calendrier"> <?php if ($nombre_jours != 0) { /* Indice du calendrier par lequel doit commencer l'affichage des numéros des jours */ $k = 1; ?> <table border="1"> <tbody> <tr> <!-- Affichage des jours de la semaine --> <td><?php echo $liste_jours[1]; ?></td> <td><?php echo $liste_jours[2]; ?></td> <td><?php echo $liste_jours[3]; ?></td> <td><?php echo $liste_jours[4]; ?></td> <td><?php echo $liste_jours[5]; ?></td> <td><?php echo $liste_jours[6]; ?></td> <td><?php echo $liste_jours[7]; ?></td> </tr> <?php for ($i = 1; $i <= $nombre_lignes; $i++) { /* Ligne $i */ ?> <tr> <?php for ($j = 1; $j <= $nombre_colonnes; $j++) { /* Colonne $j */ if ($k < $nombre_jours) { ?> <td> <?php /* Données de la variable $liste_numeros à afficher dans les cellules */ echo $liste_numeros[$k]; ?> </td> <!-- Cellule vide --> <?php $k++; } else { ?><td> </td><?php }} ?> </tr> <?php } ?> </tbody> </table> <?php } else {} ?> </li> </ul>
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
Modifié le 3 mars 2019 à 16:21
Modifié le 3 mars 2019 à 16:21
<?php $annee = 2019; $mois = 2; $liste_jours = array( 1 => 'Lundi', 2 => 'Mardi', 3 => 'Mercredi', 4 => 'Jeudi', 5 => 'Vendredi', 6 => 'Samedi', 7 => 'Dimanche' ); $dateDeb = new DateTime($annee.'-'.$mois.'-01'); //premier jour du mois $dateFin = new DateTime($dateDeb->format( 'Y-m-t' )); //dernier jour du mois $arrDates = array(); $arrSemaines = array(); while ($dateDeb -> format('Y-m-d') <= $dateFin -> format('Y-m-d')) { $semaine = $dateDeb->format('W'); $jour = $dateDeb->format('N'); $arrDates [$semaine][$jour] = $dateDeb -> format('d/m/Y'); $arrSemaines[] = $semaine; $dateDeb -> modify('+1 day'); } ?> <table border="1"> <thead> <tr> <!-- Affichage des jours de la semaine --> <?php foreach($liste_jours as $J){ echo "<th>".$J."</th>"; } ?> </tr> </thead> <tbody> <tr> <?php foreach($arrSemaines as $S){ echo "<tr>"; for ($i = 1; $i <= 7; $i++) { if(!empty($arrDates[$S][$i])){ echo "<td>".$arrDates[$S][$i]."</td>"; }else{ echo "<td></td>"; } } echo "</tr>"; } ?> </tr> </tbody> </table>
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
>
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
Modifié le 3 mars 2019 à 17:14
Modifié le 3 mars 2019 à 17:14
Merci Jordane mais ton code ne fonctionne pas correctement... ci-dessous une capture d'écran. Ce que je voudrais dans les cellules c'est juste le numéro du jour et pas la date complète. Et je ne comprends pas ces 3 premières lignes vides ainsi que le fait que les cellules soient remplies que sur une seule colonne. Je suis reparti de zéro à partir de ton code.
<!--------------------> <!------- PARC -------> <!--------------------> <?php /* On déclare la $ qui contient la liste des jours */ $liste_jours = array( 1 => 'Lundi', 2 => 'Mardi', 3 => 'Mercredi', 4 => 'Jeudi', 5 => 'Vendredi', 6 => 'Samedi', 7 => 'Dimanche' ); /* On déclare la $ qui retourne l'année en cours */ $annee = date('Y'); $premier_jour = new DateTime($annee.'-'.date('n').'-01'); $dernier_jour = new DateTime($premier_jour->format('Y-m-t')); $liste_numeros = array(); $liste_semaines = array(); while ($premier_jour->format('Y-m-d') <= $dernier_jour->format('Y-m-d')) { $semaine = $premier_jour->format('W'); $jour = $premier_jour->format('N'); $liste_numeros[$semaine][$jour] = $premier_jour->format('d/m/Y'); $liste_semaines[] = $semaine; $premier_jour -> modify('+1 day'); } /* On déclare le format français pour convertir les jours et les mois en français */ setlocale( LC_ALL, 'fr_FR.UTF8', 'fr_FR', 'fr', 'fra', 'fr_FR@euro' ); ?> <ul> <li id="conteneur_calendrier"> <table border="1"> <thead> <tr> <!-- Affichage des jours de la semaine --> <?php foreach ($liste_jours as $j) { echo "<th>".$j."</th>"; } ?> </tr> </thead> <tbody> <tr> <?php foreach ($liste_semaines as $s) { echo "<tr>"; for ($i = 1; $i <= 7; $i++) { if (!empty($liste_semaines[$s][$i])) { echo "<td>".$liste_numeros[$s][$i]."</td>"; } else { echo "<td></td>"; } } echo "</tr>"; } ?> </tr> </tbody> </table> </li> </ul>
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
Modifié le 3 mars 2019 à 17:18
Modifié le 3 mars 2019 à 17:18
Le code fonctionne parfaitement...
ce n'est pas de ma faute si tu n'es pas capable de faire des copier/coller et que tu préfères renommer les variables à ta sauce...
Donc si on reprend le code qui fonctionne....réadapté à ta façon....
ce n'est pas de ma faute si tu n'es pas capable de faire des copier/coller et que tu préfères renommer les variables à ta sauce...
Donc si on reprend le code qui fonctionne....réadapté à ta façon....
<table border="1"> <thead> <tr> <!-- Affichage des jours de la semaine --> <?php foreach($liste_jours as $J){ echo "<th>".$J."</th>"; } ?> </tr> </thead> <tbody> <tr> <?php foreach($liste_semaines as $s){ echo "<tr>"; for ($i = 1; $i <= 7; $i++) { if(!empty($liste_numeros[$s][$i])){ echo "<td>".$liste_numeros[$s][$i]."</td>"; }else{ echo "<td></td>"; } } echo "</tr>"; } ?> </tr> </tbody> </table>
YameFAZE
Messages postés
201
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
14 mars 2021
>
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
3 mars 2019 à 17:28
3 mars 2019 à 17:28
Je ne fais pas de copier/coller comme tu dis, j'écris le code pour essayer de comprendre ce que tu as fait, à quoi cela servirait-il de faire un simple copier/coller. Donc oui je peux faire des erreurs d'écriture du coup. Ci-dessous une capture d'écran mise-à-jour suite à ton nouveau code. J'ai pourtant bien vérifié et je n'ai pas fait d'erreur. A quoi sert "!empty" ?
jordane45
Messages postés
38380
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
13 janvier 2025
4 727
3 mars 2019 à 17:38
3 mars 2019 à 17:38
Pour le coup... petit oubli de ma part
il faut corriger la ligne
par
et pour le !empty ... la documentation officielle de PHP te le dira sans souci...
mais pour l'explication :
- Le "!" correspond à NOT
- empty : fonction qui vérifie qu'une variable existe et n'est pas vide
il faut corriger la ligne
$liste_semaines[] = $semaine;
par
$liste_semaines[$semaine] = $semaine;
et pour le !empty ... la documentation officielle de PHP te le dira sans souci...
mais pour l'explication :
- Le "!" correspond à NOT
- empty : fonction qui vérifie qu'une variable existe et n'est pas vide