Ajout d'un mois à une DateTime PHP
christian82000
Messages postés
47
Date d'inscription
Statut
Membre
Dernière intervention
-
christian82000 Messages postés 47 Date d'inscription Statut Membre Dernière intervention -
christian82000 Messages postés 47 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai 2 tableaux présentant sur 2 colonnes les données journalières du mois en cours et du suivant. Ces tableaux sont alimenté par une table MySQL, contenant notamment un champ "DateCivil" et un champ "Commentaires". La sélection du mois à afficher est faite à partir de la date actuelle, à laquelle on ajoute un mois pour le tableau du mois suivant. L'entête du tableau indique le mois et l'année concernée (balises th avec un colspan 2).
Tout fonctionne bien, ... sauf lorsque l'on est au mois de décembre.
Là, nous devrions avoir en titre par exemple Décembre 2020 pour le mois en cours et Janvier 2021 pour le mois suivant... mais pour ce dernier mois il s'affiche janvier 2020. Par contre, les données journalières de janvier sont bien celles de 2021.
Je vous livre le code qui aboutit à ce problème :
Voilà, mon soucis. Si quelqu'un ou quelqu'une à une idée, qu'il en soit remercié par avance.
Christian
J'ai 2 tableaux présentant sur 2 colonnes les données journalières du mois en cours et du suivant. Ces tableaux sont alimenté par une table MySQL, contenant notamment un champ "DateCivil" et un champ "Commentaires". La sélection du mois à afficher est faite à partir de la date actuelle, à laquelle on ajoute un mois pour le tableau du mois suivant. L'entête du tableau indique le mois et l'année concernée (balises th avec un colspan 2).
Tout fonctionne bien, ... sauf lorsque l'on est au mois de décembre.
Là, nous devrions avoir en titre par exemple Décembre 2020 pour le mois en cours et Janvier 2021 pour le mois suivant... mais pour ce dernier mois il s'affiche janvier 2020. Par contre, les données journalières de janvier sont bien celles de 2021.
Je vous livre le code qui aboutit à ce problème :
<div class="texteAccueil"> <table class="table"> <th colspan="2" class="th centre"> <?php echo ucfirst(utf8_encode(strftime('%B %G', strtotime($row['DateCivil']))));?> </th> <?php WHILE($row) { echo '<tr class="'.$row['CodeCouleur'].'"><td class="td80">'.ucfirst(utf8_encode(strftime('%A %e', strtotime($row['DateCivil'])))).'</td><td class="td300">'.$row['Commentaires'].'</td></tr>'; $row=$req->fetch(); } $req->closeCursor(); ?> <th colspan="2" class="th"></th> </table> </div> <!--affichage du mois suivant--> <div class="texteAccueil"> <?php if($date->format('d') == 31) { $date -> modify("-1 day + 1 month"); } else { $date -> modify("+ 1 month"); } $mois_sup=$date->format('Y-m'); $req->execute(array($mois_sup.'%')); $row=$req->fetch(); ?> <table class="table"> <th colspan="2" class="th centre"> <?php echo ucfirst(utf8_encode(strftime('%B %G', strtotime($row['DateCivil']))));?> </th> <?php WHILE($row) { echo '<tr class="'.$row['CodeCouleur'].'"><td class="td80">'.ucfirst(utf8_encode(strftime('%A %e', strtotime($row['DateCivil'])))).'</td><td class="td300">'.$row['Commentaires'].'</td></tr>'; $row=$req->fetch(); } $req->closeCursor(); ?> <th colspan="2" class="th"></th> </table> </div>
Voilà, mon soucis. Si quelqu'un ou quelqu'une à une idée, qu'il en soit remercié par avance.
Christian
Configuration: Windows / Edge 85.0.564.51
A voir également:
- Ajout d'un mois à une DateTime PHP
- Demande d'ajout snap qui disparait ✓ - Forum Snapchat
- Ajout rapide snap - Forum Snapchat
- Excel mois en lettre ✓ - Forum Excel
- Convertir trimestre en mois - Forum Excel
- Formation 600 heures en mois ✓ - Forum Bureautique
4 réponses
Bonjour
<?php $date -> modify("+ 1 month"); //Date du dernier jour du mois echo $date->format('Y-m-t');
Bonsoir Jordane,
Merci de m'avoir répondu rapidement.
Je pensais avoir répondu, mais ?
Mon problème n'est pas d'afficher tel jour du mois, le script a pour but d'afficher tous les jours du mois en cours (ici, tout va bien) et tous les jours du mois suivant. Il en résulte que la variante date() est réduite à l'année et au mois, ce qui permet bien de sélectionner tous les jours.
2 difficultés se présentaient pour l'affichage du mois suivant :
1 - lorsque la date du jour actuel tombe un 31, l'ajout d'un mois donne 2 mois plus loin (exemple, si nous sommes le 31 mars, le mois suivant sera le mois de mai. Cette difficulté est réglée par mon if :
La variable $mois_sup sert de sélecteur sur la colonne "DateCivil" de la table. Ce script fonctionne bien, sauf lorsque l'on affiche la page au mois de décembre..
2 - Lorsque la date actuelle est le mois de décembre.
C'est ici que je rencontre le problème objet de mon sujet.
Je rappelle que les données sont présentées dans deux tableaux, l'un pour les jours du mois en cours, l'autre pour les jours du mois suivant. Chaque tableau est constitué d'une ligne <th></th> dans laquelle est affiché le mois et l'année considéré, et de plusieurs lignes <td></td> (entre 28 et 31) affichant les jours.
Lorsque l'on affiche la page au mois de décembre, les données de janvier sont :
. exactes pour les jours,
. erronées pour le titre. Je m'explique : le nom du mois est correctement affiché (Janvier), mais l'année est celle du jours de l'affichage, donc l'année précédente. Par exemple, si j'affiche la page au mois de décembre 2020, j'aurais comme résultat dans le premier tableau, Décembre 2020 et dans le second tableau, Janvier 2020, alors que logiquement je devrais avoir Janvier 2021. Les jours affichés sont bien ceux du mois de janvier 2021. La date renseignée dans la colonne "DateCivil" dans la table agenda est bien "2021-01-01" sur la ligne du titre ainsi que sur la ligne correspondant au premier jour de janvier.
J'ai peut-être été un peu long dans mon explication, mais le problème n'est pas simple à expliquer.
A toutes fins utiles, le site est "paroisse-saint-nauphary.net" onglet agenda.
Très cordialement,
Christian
Merci de m'avoir répondu rapidement.
Je pensais avoir répondu, mais ?
Mon problème n'est pas d'afficher tel jour du mois, le script a pour but d'afficher tous les jours du mois en cours (ici, tout va bien) et tous les jours du mois suivant. Il en résulte que la variante date() est réduite à l'année et au mois, ce qui permet bien de sélectionner tous les jours.
2 difficultés se présentaient pour l'affichage du mois suivant :
1 - lorsque la date du jour actuel tombe un 31, l'ajout d'un mois donne 2 mois plus loin (exemple, si nous sommes le 31 mars, le mois suivant sera le mois de mai. Cette difficulté est réglée par mon if :
<?php
if($date->format('d') == 31)
{
$date -> modify("- 1 day + 1 month");
}
else
{
$date -> modify("+ 1 month");
}
$mois_sup=$date->format('Y-m');
?>
La variable $mois_sup sert de sélecteur sur la colonne "DateCivil" de la table. Ce script fonctionne bien, sauf lorsque l'on affiche la page au mois de décembre..
2 - Lorsque la date actuelle est le mois de décembre.
C'est ici que je rencontre le problème objet de mon sujet.
Je rappelle que les données sont présentées dans deux tableaux, l'un pour les jours du mois en cours, l'autre pour les jours du mois suivant. Chaque tableau est constitué d'une ligne <th></th> dans laquelle est affiché le mois et l'année considéré, et de plusieurs lignes <td></td> (entre 28 et 31) affichant les jours.
Lorsque l'on affiche la page au mois de décembre, les données de janvier sont :
. exactes pour les jours,
. erronées pour le titre. Je m'explique : le nom du mois est correctement affiché (Janvier), mais l'année est celle du jours de l'affichage, donc l'année précédente. Par exemple, si j'affiche la page au mois de décembre 2020, j'aurais comme résultat dans le premier tableau, Décembre 2020 et dans le second tableau, Janvier 2020, alors que logiquement je devrais avoir Janvier 2021. Les jours affichés sont bien ceux du mois de janvier 2021. La date renseignée dans la colonne "DateCivil" dans la table agenda est bien "2021-01-01" sur la ligne du titre ainsi que sur la ligne correspondant au premier jour de janvier.
J'ai peut-être été un peu long dans mon explication, mais le problème n'est pas simple à expliquer.
A toutes fins utiles, le site est "paroisse-saint-nauphary.net" onglet agenda.
Très cordialement,
Christian
Je n'ai pas tout lu....
mais ....
Si tu connais l'année et le mois en cours....
Dans ce cas, le mois suivant sera toujours le mois +1 du premier jour du mois ...
mais ....
Si tu connais l'année et le mois en cours....
Dans ce cas, le mois suivant sera toujours le mois +1 du premier jour du mois ...
$date = date("Y-m-01"); .// premier jour du mois actuel $newdate = strtotime ( '+1 month' , strtotime ( $date ) ) ; // premier jour du mois suivant
La formule donne comme résultat 2678400 ce qui correspond au nombre de secondes dans un mois de 31 jours, et non le premier jour du mois suivant.
Si si je cherches, je ne voulais pas te froisser, mais simplement faire remarquer cet oubli...
D'ailleurs mes recherches me conduisent à penser que le problème ne vient pas du script de sélection des données, mais de celui d'affichage du titre des tableaux. En effet, si je supprime les fonctions de conversion (strftime() et strtotime()), j'ai bien la bonne date qui s'affiche au format 01-01-2021 par exemple.
Je continue mes recherches et reviendrai sur le forum pour donner la solution ,,, ou solliciter encore de l'aidde!
En tout cas, merci Jordane de t'être investie sur mon problème.
Christian
D'ailleurs mes recherches me conduisent à penser que le problème ne vient pas du script de sélection des données, mais de celui d'affichage du titre des tableaux. En effet, si je supprime les fonctions de conversion (strftime() et strtotime()), j'ai bien la bonne date qui s'affiche au format 01-01-2021 par exemple.
Je continue mes recherches et reviendrai sur le forum pour donner la solution ,,, ou solliciter encore de l'aidde!
En tout cas, merci Jordane de t'être investie sur mon problème.
Christian