Encore une comparaison de date

Eléphant du PHP | 114 Messages

28 juil. 2006, 19:34

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.

Mammouth du PHP | 19672 Messages

28 juil. 2006, 20:08

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à.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 114 Messages

29 juil. 2006, 10:48

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....

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 juil. 2006, 11:46

Tu as oublié une étape après l'exécution... la lecture avec un mysql_result() ou mysql_fetch_assoc() ou autre.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 114 Messages

29 juil. 2006, 13:30

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

29 juil. 2006, 14:58

Le résultat est celui attendu donc ça parait correct. :)
Toutefois le timestamp du jour s'obtient aussi par time() tout simplement.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 114 Messages

29 juil. 2006, 15:50

Merci pour l'info, je vais regerder ça.