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 :

Retirer l'équivalent d'1 mois à une date


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut Retirer l'équivalent d'1 mois à une date
    Bonjour,

    Je me casse la tête avec le problème suivant :

    A partir d'une date définie, je souhaiterais récupérer les dates correspondant à 1 mois, 2 mois avant, 3 mois avant, etc.

    Avec un DateTime et un DateInterval('P1M') :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
     
    $now = new DateTime('2011-08-31');
    echo '<h2>'.$now->format('Y-m-d').'</h2>';
     
    for ($i=1;$i<=12;$i++)
    {
        $interval = new DateInterval('P1M');
        $now->sub($interval);
        echo '<pre>';print_r($now->format('Y-m-d'));echo '</pre>';
    }
    J'obtiens la sortie suivante :

    2011-08-31

    2011-07-31

    2011-07-01

    2011-06-01

    2011-05-01

    2011-04-01

    2011-03-01

    2011-02-01

    2011-01-01

    2010-12-01

    2010-11-01

    2010-10-01

    2010-09-01
    Le 31 juin n'existant pas, il va me choisir le 1er juillet. J'aurai préféré qu'il choisisse le 30 juin, en gros le jours le plus proche existant dans le mois civil précédent...

    Comment faire ça en PHP ?

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    intéressant, essaye de le faire avec le premier de mois, ensuite t'affiches le "last day of this month"

  3. #3
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Bizarre.

    Tu peux essayer cette petite bidouille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    $now = new DateTime('2011-08-31');
    echo '<h2>'.$now->format('Y-m-d').'</h2>';
     
    for ($i = 0; $i < 12; $i++) {
    	$now->modify('-' . $now->format('t') . ' days');
    	echo '<pre>';
    	print_r($now->format('Y-m-d'));
    	echo '</pre>';
    }
    ?>
    Mais j'ai une préférence pour la méthode de stealth35

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    finalement on peut le faire direct :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $now = new DateTime('2011-08-31');
    echo '<h2>', $now->format('Y-m-d'), '</h2>';
     
    $interval = DateInterval::createFromDateString('last day of last month');
    $period = new DatePeriod($now, $interval, 12, DatePeriod::EXCLUDE_START_DATE);
     
    foreach($period as $date)
    {
        echo '<pre>', $date->format('Y-m-d'), '</pre>';
    }

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2004
    Messages : 772
    Par défaut
    Désolé d'avoir laissé ce problème de côté si longtemps...

    Alors la méthode de stealth35 est bien pour récupérer le dernier jour du mois. Maintenant, mon problème était de m'adapter à n'importe quelle date (le 7 du mois comme le 31).

    Et donc au final, il a fallu bidouiller :
    Je garde mon DateInterval("P$iM"), et tant que je tombe sur une date sans que le numéro de mois ne change, je retranche un jour jusqu'à changer de mois... Pas très joli mais ça colle parfaitement à ce que je voulais...

    Merci pour vos réponses

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

Discussions similaires

  1. [Dates] Ajouter des mois à une date
    Par tiger63 dans le forum Langage
    Réponses: 8
    Dernier message: 25/05/2007, 16h42
  2. ajouter 8 mois à une date
    Par Myfred dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 07/03/2007, 11h35
  3. Requête Access 2003 : Ajouter 6 mois à une date
    Par billy123 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 28/02/2007, 16h26
  4. [Dates] Ajouter un mois à une date
    Par Higestromm dans le forum Langage
    Réponses: 8
    Dernier message: 17/01/2006, 15h27
  5. ajouter 1 mois à une date dans une requete
    Par alain.lc dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 04/04/2005, 12h05

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