Page 1 sur 1

Encore une comparaison de date

Posté : 28 juil. 2006, 19:34
par Florent
Bonjour
Mon but est une fois la date d'inscription lue, dire : "Vous êtes inscrit depuis x jours".
// je crée un timestamp de la date en cours 
$maintenant = mktime(0, 0, 0, date("m"), date("d"), date("Y"));

// prendre date dans la table
$sql = "SELECT date FROM membre WHERE login='$login' ";
$rep = mysql_query($sql);
$inscription = $rep['date'];
Le problème c'est que je n'arrive pas à comparer $maintenant et $inscription.
J'ai donc fait mktime avec $maintenant mais avec la date sortie de la table, je ne vois pas trop ?

Une petite aide serait bienvenue. Merci d'avance.

Posté : 28 juil. 2006, 20:08
par Cyrano
Première chose, "date" est un mot réservé en SQL, l'utiliser pour nommer un champ est une mauvaise idée.

Ceci dit, une fois la date récupérée, il faut en extraire les éléments pour créer un nouveau mktime. Le séparateur dans la date au format SQL est en principe le "-" et tu as donc des dates qui sont de la forme 2006-07-29 : avec explode(), tu peux avoir chaque élément:
$d = explode("-", $inscription);
Tu sais donc maintenant que le jour correspond à $d[2]. le mois à $d[1] et l'année à $d[0].

Je te laisse continuer, tu devrais pas avoir trop de mal en partant de là.

Posté : 29 juil. 2006, 10:48
par Florent
Salut
C'est le "explode" que je ne connaissais pas. Et j'en ai compris le principe.
$sql = "SELECT la_date FROM membre WHERE login='$login' ";
	$rep = mysql_query($sql);
	$inscription = $rep['la_date'];
		
	$d = explode("-", $inscription);
	
	echo $d[0] . '<br />';
	echo $d[1] . '<br />';
	echo $d[2] . '<br />';
	$resultat = mktime(0, 0, 0, $d[1], $d[2], $d[0]);
	echo $resultat;
La, je bloque car mon array avec mes echos ne m'affichent rien, je n'ai que $resultat qui donne -1

Dans ma table ma date est bien de ce style : 2006-03-31
Donc avec $d[0] je devrais avoir 2006 mais suite à mon echo il n'y a rien, donc le problème semble venir d'avant, mais je cherche....

Posté : 29 juil. 2006, 11:46
par Truc
Tu as oublié une étape après l'exécution... la lecture avec un mysql_result() ou mysql_fetch_assoc() ou autre.

Posté : 29 juil. 2006, 13:30
par Florent
A force de faire des essais dans tous les sens j'ai viré le mysql_fetch_array()

Bon voilà c'est fait.

J'ai donc le mktime d'aujourd'hui, celui de la date d'inscription, j'ai fais une soustraction des deux que je divise par 86400 pour avoir le nombre de jour.
Comme ceci :
$r = mysql_fetch_array($rep);
	$inscription = $r['date'];
		
	$d = explode("-", $inscription);
	
	$resultat = mktime(0, 0, 0, $d[1], $d[2], $d[0]);
	echo $resultat.'<br>';
	
	/* On crée un timestamp de la date en cours */
	$maintenant = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
	echo $maintenant.'<br>';
	
	// 86400 s/j
	$diff = intval(($maintenant - $resultat)/86400) ;
	echo $diff;
J'obtiens 132 jours pour la date du 2006-03-18

J'espère juste que le principe utilisé est bon.
Si vous me confirmez ça, je met "résolu" et vous remercie beaucoup de votre aide et patiente avec ces questions basiques.

Posté : 29 juil. 2006, 14:58
par Truc
Le résultat est celui attendu donc ça parait correct. :)
Toutefois le timestamp du jour s'obtient aussi par time() tout simplement.

Posté : 29 juil. 2006, 15:50
par Florent
Merci pour l'info, je vais regerder ça.