Date jusqu'au 01 du mois précédent

Eléphant du PHP | 70 Messages

25 févr. 2009, 10:42

Bonjour a tous :o , alors voila mon problème est le suivant : :x

Dans nommée incidents de ma bdd j'ai un champ date (aaaa/mm/jj).
Dans mon application j'ai un formulaire qui doit me montrer tous les incidents de cette table dont la date est comprise entre le 01/du mois m-1 jusqu'a la date actuelle.

Pour le moment ma requete sql me ramene toutes ma table car je ne vois pas comment faire dans mon where pour gerer sa.

Quelqu'un peut-il m'aider ?????? :oops:

PS: pas facile a expliquer :? donc hésiter pas a me poser des questions pour plus de renseignements.
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 févr. 2009, 10:58

Bonjour,

Quelque chose du genre probablement:
mysql_query("SELECT * FROM nom_table WHERE champ_date BETWEEN '".mktime(0,0,0, date("m")-1, 1, date("Y"))."' AND NOW()");
Je t'invite à consulter la doc sur mktime pour bien comprendre ma suggestion:
http://fr2.php.net/mktime
Modifié en dernier par @rthur le 25 févr. 2009, 13:36, modifié 1 fois.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 70 Messages

25 févr. 2009, 11:15

Bonjour et merci @rthur d'avoir pris le temps de répondre.

Je viens de lire la doc que tu ma filer ( bon j'ai pas tout compris ^^ ), je l'ai adapter a mon appli et j'ai creer un champs adequate dans ma table, le probleme est que ce champs ne s'affiche pas.

Cela ne fonctionne pas

Et puis un cas n'est pas traiter dans cette solution, le cas ou si le mois actuel est janvier cad 01, alors faut afficher les incidents du mois de décembre cad 12 de l'année passer cad y-1.

Par consequent je pense qu'il me faut créer une fonction qui gere sa et je l'introduise dans ma requete. nn?

J'aimerais vos avis et votre aide svp

ps: je debute en php
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

25 févr. 2009, 12:10

mktime gère ça, si tu lui donnes "0" comme mois, il prendra "12" de l'année précédente.

Il y a aussi deux autres possibilités.

Une basée sur strtotime() :
$date2 = time();  // NOW()
$date1 = strtotime('-1 MONTH', $date2); // Date2 - 1 MOIS
$query = sprintf('SELECT * FROM nom_table WHERE champ_date BETWEEN %s AND %s', $date1, $date2);
Une utilisant les fonctions de MySQL :
$query = 'SELECT * FROM nom_table WHERE champ_date BETWEEN DATE_SUB(NOW(), INTERVAL 1 MONTH) AND NOW()';

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

25 févr. 2009, 12:17

je l'ai adapter a mon appli et j'ai creer un champs adequate dans ma table,
Normalement tu n'as pas besoin de créer de champ supplémentaire, tu as juste besoin d'un champ au format date dans ta table...
Et puis un cas n'est pas traiter dans cette solution, le cas ou si le mois actuel est janvier cad 01, alors faut afficher les incidents du mois de décembre cad 12 de l'année passer cad y-1.
Si si il est bien traité, c'est d'ailleurs la force de la fonction mktime!
Regarde bien les exemples de la doc ;)
ps: je debute en php
Pourquoi posté dans le forum PHP avancé alors? :P

##edit: grillé par Naho ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 70 Messages

25 févr. 2009, 12:32

Bonjour naholyr, j'ai adapter t'a premierr solution
$date2 = time();  // NOW() 
	echo $date2.'<br>';
	$date1 = strtotime('-1 MONTH', $date2); // Date2 - 1 MOIS 
	echo $date1.'<br>';
	$query = sprintf('SELECT * FROM incidents WHERE date_icdt BETWEEN %s AND %s', $date1, $date2); 
	echo $query;
en voici le resultat:
1235557514
1232879114
SELECT * FROM incidents WHERE date_icdt BETWEEN 1232879114 AND 1235557514Erreur requete

et la deuxieme solution n'a pas eu plus de succes

et la solution de @rthur maffiche une erreur de syntaxe
$resultat=mysql_query("SELECT * FROM incidents WHERE date_icdt BETWEEN '".mktime(0,0,0, date("m")-1, 1, date("Y"))."' AND NOW()";
J'ai bien un champ date dans ma table, mais son format est "Y/m/d"

ps: j'ai poster mon message sur php avancer car je ne pensait pas que des debutant tel que moi sache repondre a mon probleme
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

25 févr. 2009, 12:38

Attention je m'en excuse mais mes propositions sont à côté de la plaque : elles te donneront les résultats entre aujourd'hui et le mois précédent mais à la même date, pas au 01.

C'est bien la solution d'@rthur qui est la bonne.
Par contre effectivement tu débutes en PHP, n'as-tu pas vu qu'il manquait une parenthèse fermante dans son code ? ;)
Modifié en dernier par naholyr le 25 févr. 2009, 12:44, modifié 2 fois.

Eléphant du PHP | 70 Messages

25 févr. 2009, 12:41

Si ^^ je venais de m'en appercevoir juste avant de lire ton message.

Donc j'ai corriger sa et desormais sa m'affiche
Resource id #3

Voyez-vous pourquoi?


Apriori, je dis bien a priori,
il existerai une autre solution qui est la suivante
$req = mysql_query("SELECT * DATE_ADD(date_icdt, - INTERVAL 1 MONTH) FROM incidents");
	if(mysql_num_rows($req) == 0)
	{
		echo 'Aucun incident!';
	}
	else
	{
		while($dat = mysql_fetch_assoc($req))
		{
			echo 'ID: '.$dat['champ_id'].' - Description: '.$dat['champ_description'].' - Date: '.$dat['date_icdt'].'<br />';
		}
	}
bon il me faut encore modifier le echo mais je ne comprend pas la syntaxe de ce echo
La devise du vrai Geek ==> Plus tu dors moins t'es fort !!