IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Récupérer les x derniers mois [PHP 5.2]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut Récupérer les x derniers mois
    Bonjour à tous,

    J'ai développé une fonction qui permet de récupérer les X derniers mois suivant le paramètre qu'on passe à la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    function getLatestMonth($dernierMois){
            $oDateDuJour = new DateTime();
            $arParMois = array();
     
            for($i = 0; $i < $dernierMois; $i++){
                if($i === 0){
                    $arParMois[$i] = array(
                        'firstDay' => '01',
                        'lastDay' => $oDateDuJour->format('d'),
                        'month' => $oDateDuJour->format('m'),
                        'year' => $oDateDuJour->format('Y')
                    );
                }else{
                    //On enlève 1 mois à la date du jour
                    $oDateDuJour->modify('-1 months');
                    $arParMois[$i] = array(
                        'firstDay' => '01',
                        //t renvoie le nombre de jour dans un mois, donc le dernier jour du moi !
                        'lastDay' => $oDateDuJour->format('t'),
                        'month' => $oDateDuJour->format('m'),
                        'year' => $oDateDuJour->format('Y')
                    );
                }
            }
     
            return $arParMois;
        }
    Donc si je fais getLatestMonth(5), va me retourner un tableau avec les 5 derniers mois. On aura un résultat du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Array
    (
        [0] => Array
            (
                [firstDay] => 01
                [lastDay] => 06
                [month] => 08
                [year] => 2012
            )
     
        [1] => Array
            (
                [firstDay] => 01
                [lastDay] => 31
                [month] => 07
                [year] => 2012
            )
     
        [2] => Array
            (
                [firstDay] => 01
                [lastDay] => 30
                [month] => 06
                [year] => 2012
            )
     
        [3] => Array
            (
                [firstDay] => 01
                [lastDay] => 31
                [month] => 05
                [year] => 2012
            )
     
        [4] => Array
            (
                [firstDay] => 01
                [lastDay] => 30
                [month] => 04
                [year] => 2012
            )
     
        [5] => Array
            (
                [firstDay] => 01
                [lastDay] => 31
                [month] => 03
                [year] => 2012
            )
     
    )
    On remarque le tableau à l'indice 0 où le lastDay est le 6 (normal c'est la date du jour). Le problème vient quand on se trouve en fin de mois. Si on était le 31.07.2012 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $ladate = new DateTime("31.07.2012");
    $ladate->modify('-1 months');
    echo $ladate->format("d.m.Y");//Affiche 01.07.2012
    Le résultat est logique puisque juin compte 30 jours.

    Est-ce que quelqu'un aurait une idée pour corriger ce petit désagrément ?

    Merci à tous pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Par défaut
    Bonjour,

    Essaie comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    function getLatestMonth($dernierMois){
        $arParMois = array();
     	$date_courant = date("Y-m-d");
     
        for($i = 0; $i < $dernierMois; $i++){
               if($i === 0){
                    $arParMois[$i] = array(
                    	'month' => date("m")
                    );
                }else{
                    //- 1 mois à la date du jour
                    $mois = date("m", strtotime("-1 month", strtotime($date_courant)));
                    $arParMois[$i] = array(
                        'month' => $mois
                    );
                    $date_courant = date("Y-".$mois."-d");
                }
            }
     
      return $arParMois;
    }
    En espérant t'avoir aidé.

  3. #3
    Membre éclairé Avatar de LhIaScZkTer
    Inscrit en
    Mai 2004
    Messages
    564
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2004
    Messages : 564
    Par défaut
    Hello,

    Merci beaucoup c'est nickel

  4. #4
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Par défaut
    Bonjour,

    Je relance le sujet 1 an après car ca m’intéresse.
    Comment y inclure et gérer l'année dans la fonction de MinDBuSteR ?


  5. #5
    Membre éclairé
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2007
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2007
    Messages : 290
    Par défaut
    J'ai adapté le code ce qui donne le mois + l'année. La fonction déduit d'un an a chaque fois que le mois est 12.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     function getLatestMonth($dernierMois){
        $arParMois = array();
     	$date_courant = date("Y-m-d");
        $year = date("Y");
        for($i = 0; $i < $dernierMois; $i++){
               if($i === 0){
                    $arParMois[$i] = array(
                    	'month' => date("m"),
    					'year' => $year
                    );
                }else{
                    //- 1 mois à la date du jour
                    $mois = date("m", strtotime("-1 month", strtotime($date_courant)));
    				if($mois == '12')
    				{
    				$year = date("Y", strtotime("-1 year", strtotime($date_courant)));
    				}
     
                    $arParMois[$i] = array(
                        'month' => $mois,
    					'year' => $year
                    );
                    $date_courant = date($year."-".$mois."-d");
                }
            }
     
      return $arParMois;
    }
    print_r(getLatestMonth('12'));

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 21/05/2008, 15h47
  2. [Dates] Récupérer les 6 derniers mois
    Par identifiant_bidon dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2007, 09h21
  3. [MySQL 3.23.41]Requete qui affiche les 6 derniers mois
    Par nanarou dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/09/2006, 19h07
  4. [Requette] les 12 derniers mois seulement
    Par bob75000 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2006, 13h48
  5. Récupérer les N derniers lignes
    Par arsenik7 dans le forum Oracle
    Réponses: 8
    Dernier message: 12/05/2006, 13h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo