Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/09/2011, 14h30   #1
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
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 :
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 :

Citation:
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 ?
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 15h52   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
intéressant, essaye de le faire avec le premier de mois, ensuite t'affiches le "last day of this month"
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 15h57   #3
Modérateur
 
Avatar de Nesmontou
 
Homme Benjamin PREVOT
Architecte de système d'information
Inscription : septembre 2004
Messages : 1 568
Détails du profil
Informations personnelles :
Nom : Homme Benjamin PREVOT
Âge : 30
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Architecte de système d'information
Secteur : Finance

Informations forums :
Inscription : septembre 2004
Messages : 1 568
Points : 2 493
Points : 2 493
Bizarre.

Tu peux essayer cette petite bidouille :
Code :
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
__________________
Si vous ne pouvez expliquer un concept à un enfant de six ans, c'est que vous ne le comprenez pas complètement. Albert EINSTEIN

F.A.Q. : Java, PHP, (X)HTML / CSS

N'oubliez pas de cliquer sur le bouton Résolu en bas de page quand vous avez obtenu une solution à votre problème
Nesmontou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2011, 16h14   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
finalement on peut le faire direct :

Code :
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>';
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2011, 12h45   #5
Membre chevronné
 
Inscription : juin 2004
Messages : 747
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : juin 2004
Messages : 747
Points : 741
Points : 741
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
__________________
  • Mon blog PHP : http://blog.alterphp.com
  • "Peace cannot be kept by force, it can only be achieved by Understanding" -- Albert Einstein
pc.bertineau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h26.


 
 
 
 
Partenaires

Hébergement Web