Page 1 sur 1

Afficher les mois entre deux dates

Posté : 05 oct. 2016, 21:25
par cecile54
Bonjour,

Je cherche à afficher les mois qui sont compris entre deux dates.
Voici un exemple :

Date de début : 04/10/2016
Date de fin : 28/03/2017

J'aimerai afficher :
octobre
novembre
décembre
janvier
février
mars

Merci pour votre aide

Bonne soirée

Re: Afficher les mois entre deux dates

Posté : 06 oct. 2016, 09:32
par moogli
salut,

Pour commencer il te faut extraire le mois de chaque date dates par exemple date.

ensuite il te faut voir si la date de fin est après le mois de décembre de l'année courante
si oui
il te faut afficher les mois du courant à décembre et recommencer jusqu’à ce que atteigne le dernier mois
si non boucle for du mois de départ + jusqu'au mois de fin (compris) : for ($m = $currentMonth; $m<=$finalMonth; $m++)

pour l'affichage du mois traduit il faut utiliser strftime

exemple
<?php

setlocale(LC_TIME, 'fr');
for ($i=1;$i<=12;$i++) {
    echo strftime("%B", mktime(0, 0, 0, $i, 0, 0)),'<br/>';
}

et comme j'suis sympa trois lien

http://lmgtfy.com/?q=php+show+months+between+two+dates
http://stackoverflow.com/questions/1874 ... -two-dates
http://stackoverflow.com/questions/2576 ... tes-in-php

@+

Re: Afficher les mois entre deux dates

Posté : 11 oct. 2016, 12:45
par cecile54
Bonjour,

Merci beaucoup.
Cependant, je suis très novice en php et je ne comprends pas comment traduire ton algorithme en code.
Pourrais-tu, s'il te plait, me fournir un exemple de code?

Merci

Re: Afficher les mois entre deux dates

Posté : 11 oct. 2016, 13:12
par moogli
c'est simple la fonction date permet d'avoir la date courante (ou une autre si tu lui donne le time stamp) avec le format que tu veux.
en clair : echo date('m'); t'affiches le mois courante
a partir de la c'est relativement simple de comparer à 12 (vu qu'il y a 12 mois dans l'année ;) )
la tu sais comment afficher les mois restant pour l'année courante (parce que j'ai donné le code dans mon premier message et qu'il n'y a qu'a changer l'initialisation de la boucle for).

maintenant il faut voir si la date dépasse l'année courante, pour cela il faut récupérer l'année de la date de fin et comparer à la date de début (dans mon exemple c'est la date courante).
si c'est plus grand il faut boucler de 1 jusqu'au dernier mois de la date final et cela autant de fois qu'il y a d'année entre début et fin.
donc une boucle pour le nombre d'année
<?php
for ($i = 2016; $i <= $anneFin; $i++) '
    for($j = $moisDebut; $i<= $moisfin; $i++){
        // le code d'affichage que j'ai mis dans mon premier message en prenant garde a bien remplacer ce qu'il faut
    }
}
reste a calculer les variables, $moisDebut et $mois pour que le second if tourne
donc
<?php
$moisDebut = date('m');
$moisFin = date('m',$timestampDatefin);
if($i <= date('Y')) {
$moisDebut = date('m');
$moisFin = date('m',$timestampDatefin);
}
// cas entre année courant et année fin
elseif($i <= date('Y',$timestampDatefin)) {
$moisDebut = 1;
$moisFin = 12;
}
// cas année de fin
elseif($i == date('Y',$timestampDatefin){
$moisDebut = 1;
$moisFin = date('m',$timestampDatefin);

voilà a quoi cela peux ressembler.





maintenant que tu as tous bien lu




tu peux regarder ma première réponse




et copier



puis coller


le code de la réponse OK du troisième et dernier lien.


un DateTime peux être initialisé à partir de la méthode DateTime::createFromFormat afin de correspondre au mieux au format de date que tu utilises.

Voilà c'est simple, fonctionnel et rapide .....


@+