Reculez de plusieurs mois, Date ou MySQL ?

Sophos
Invité n'ayant pas de compte PHPfrance

19 juin 2006, 12:16

Bonjour,

J'ai un soucis au niveau de traitement de date. Dans ma base SQL, (MySQL) j'ai plusieurs données avec, notamment, la date de leur entée.
Je souhaite récupérer les entrées d'il y a deux, trois, et 6 mois.
Je ne sais pas si je dois effectuer la requete SQL avec comme parametre,
//Il y a deux mois
$mois2 = Date("m")-2;
//requete MySQL
$req = "SELECT champs1, champs2, Date from table where MONTH(date)=$mois2 order by Date ASC";
Ou s'il existe une fonction en MySQL qui permet directement de gérer ceci. Car si je suis en janvier et que je souhaite aller deux mois en arrière le script ci dessus me retournera -1 (01-2=-1) ce qui vas bien sur poser problème.

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

19 juin 2006, 12:40

Cela peut effectivement se faire en php ou en sql. Tu devrais trouver ton bonheur dans la FAQ :

Quelques petites manipulations avec les dates (PHP/MySQL)
:)

Invité
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 09:25

4 - Obtenir une date dans le futur/le passé

avec PHP :
<?php
$date = Array('annee'=>date('Y'), 'mois'=>date('m'), 'jour'=>date('d'));
$N = 31;

// mktime fait automatiquement le calcul
$time = mktime(00, 00, 00, $date['mois'], $date['jour']+$N, $date['annee']);
$dansNjours = date('d/m/Y', $time);
echo $dansNjours;
?>
avec MySQL :
Code:

Code : Tout sélectionner

SELECT DATE_ADD(NOW(),INTERVAL 5 DAY); # le futur SELECT DATE_SUB(NOW(), INTERVAL 5 DAY); # le passé
Je dois donc faire un

Code : Tout sélectionner

SELECT DATE_SUB(NOW(), INTERVAL 31 DAY); # le passé
Or il faut que je crée un tableau avec le nombre de jours de chaque mois ? car si le mois en question n'as que 30 ou en fevrier quin'as que 28 jours ca va me retoruner deux mois en arrière et non un seul mois en arrière.

A moin qu'on peut considérer cela comme un detail a deux ou trois jours près...

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 juin 2006, 09:43

Si tu regardes dans la doc de DATE_SUB : http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Tu verras que tu peux utiliser différents paramètres pour l'intervalle, pas forcément des jours

Donc cette requête te renverra la date d'il y a un mois :)

Code : Tout sélectionner

SELECT DATE_SUB(NOW(), INTERVAL 1 MONTH);

Sophos
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 10:13

Reuh, ^^

Code : Tout sélectionner

`Date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) AND `Date` < DATE_SUB(NOW(), INTERVAL 2 MONTH) order by Date ASC
Voila le code que j'ai utilisé, donc la normalement je dois avoir les entrée regroupé par mois, dans ce cas, les entrées enregistré il y a un mois non ?

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

20 juin 2006, 10:15

:lol: Toujours la même erreur qui revient :

`Date` >= DATE_SUB(NOW(), INTERVAL 1 MONTH) => 20/05

AND `Date` < DATE_SUB(NOW(), INTERVAL 2 MONTH) => 20/04

Comment une date peut-elle être supérieure au 20 mai, et inférieure au 20 avril ? :)

Tu peux aussi simplifier un peu en utilisant BETWEEN

Sophos
Invité n'ayant pas de compte PHPfrance

20 juin 2006, 10:24

lol, merci beaucoup, vs êtes vrt sympas de répondre aussi vite.

Je vais au plus vite corriger cette erreur, merci beaucoup !! :wink: