Souci pour une fonction date

will.smith Messages postés 264 Statut Membre -  
will.smith Messages postés 264 Statut Membre -
bonjour,

j'ai remis une fonction pour la date pour savoir qu'elle est la date de sa dernier visite

le code :

<?php
	  echo'<li><div class="texte_blanc">Dernière visite : '.$insc = $data1['membre_derniere_visite'];
	  if(date('d/m/Y à H\hi') == date('dmY', $insc))
	   echo 'Aujourd\'hui';
	   else if((date('d') - 1) == date('d', $insc) AND date('mY') == date('mY', $insc))
	    echo 'Hier';
		else
		 echo date('d/m/Y à H\hi', $insc)
		 .'</div></li>';
?>


mais il me met :

1245148111Hier

au lieu d'affiché :

hier à 23 h

et quand il se connecte aujourd'hui :

124525128217/06/2009 à 17h08

au lieu d'affiché :

aujourd'hui à 17 h 08

merci de me dire où est l'érreur

et entre parenthèse

j'ai voulu éssayé d'affiché cette méthode juste pour que je sache :

Dernière visite : il y as 10 s où il y as 1 mn où il y as 1 h où 2 h et ensuite à partir de 3 h je remettrais aujourd'hui

donc j'ai éssayé de mettre au lieu de H j'ai pensé à mettre un I et S

donc comment je dois procédé

merci de votre aide

29 réponses

Alkaaran Messages postés 291 Statut Membre 37
 
C'est fouilli tout ca :)

<?php
	$insc = $data1['membre_derniere_visite'];
	$difference = time() - $insc;
	echo '<li><div class="texte_blanc">Dernière visite : ';

	//Si c'est aujourd'hui
	if(date('dmY') == date('dmY', $insc))
		//Si c'est il y a moins de 3 heures
		if( date('G',$difference) < 3 )
		{
			echo 'Il y a ';
			if (date('G',$difference)==0)
				echo date('G\h',$difference);
			elseif (date('i',$difference)=="00")
				echo date('i\m',$difference);
			else echo date('s\s',$difference);
		}
		//Si c'est il y a plus de trois heures
		else
			echo 'Aujourd\'hui';
	//Si c'est hier
	else if((date('d') - 1) == date('d', $insc) AND date('mY') == date('mY', $insc))
	    echo 'Hier';
	//Si c'est une autre date
	else
		echo date('le d/m/Y', $insc) ;

	//Puis affichage de l'heure
	if( date('G',$difference) >= 3 )
		echo  date('à H\hi', $insc).'</div></li>';
?>


Voila si tu ne comprends pas ce que j'ai fait n'hesites pas à demander
0
will.smith Messages postés 264 Statut Membre 10
 
merci

mais là il y as juste un petit détail qui n'est pas grave il met Tuesdaye 16/06/2009 au lieu mardi

et aussi il y as qq chose qui cloche pour les seconde il met 30 seconde là c bon mais il oublie de mettre 1 mn car il met 15 où 30 à chaque fois et il oublie de mettre 1 mn où 2 mn etc. il reste toujour fiser sur les secondes

mais pour le jours il met en anglais merci
0
Alkaaran Messages postés 291 Statut Membre 37
 
pour les jour en francais il va falloir le faire toi meme, mettre les jours en francais dans un tableau et faire $jours_francais[ date('w', $insc) ]
0 etant dimanche et 6 samedi

Pour les minutes je me suis trompé dans les conditions :

 			if (date('G',$difference)!=0)
				echo date('G\h',$difference);
			elseif (date('i',$difference)!="00")


Voila ca devrait marcher
0
will.smith Messages postés 264 Statut Membre 10
 
merci mais il y as petit souci

il met : Dernière visite : Il y a 00m1h

donc il met 1h en trop

voilà le code corrigé

$insc = $data1['membre_derniere_visite'];
	$difference = time() - $insc;
	echo '<li><div class="texte_blanc">Dernière visite : ';

	//Si c'est aujourd'hui
	if(date('dmY') == date('dmY', $insc))
		//Si c'est il y a moins de 3 heures
		if( date('G',$difference) < 3 )
		{
			echo 'Il y a ';
			if (date('G',$difference)==0)
				echo date('G\h',$difference);
			elseif (date('i',$difference)=="00")
				echo date('i\m',$difference);
			else echo date('s\s',$difference);
		}
		//Si c'est il y a plus de trois heures
		else
			echo 'Aujourd\'hui';
	//Si c'est hier
	else if((date('d') - 1) == date('d', $insc) AND date('mY') == date('mY', $insc))
	    echo 'Hier';
	//Si c'est une autre date
	else
		echo date('le d/m/Y', $insc) ;

	//Puis affichage de l'heure
	if (date('G',$difference)!=0)
				echo date('G\h',$difference);
			elseif (date('i',$difference)!="00")'</div></li>';


et si un jour je veut affiché il y as 8 h je change ce chiffre dans ce bout de code

//Si c'est aujourd'hui
	if(date('dmY') == date('dmY', $insc))
		//Si c'est il y a moins de 3 heures
		if( date('G',$difference) < 3 )


je change le 3 par 8 si j'ai bien compris

ps je rédis juste pour dire il oublie toujour mettre 1 mn où 2 mn il reste fixer les seconde
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alkaaran Messages postés 291 Statut Membre 37
 
Bon je reprends mon code (je l'ai écrit en vitesse faut dire ^^)

<?php
	$insc = $data1['membre_derniere_visite'];
	$difference = time() - $insc;
	$heure_defaut = 3;
	echo '<li><div class="texte_blanc">Dernière visite : ';

	//Si c'est aujourd'hui
	if(date('dmY') == date('dmY', $insc))
		//Si c'est il y a moins de 3 heures
		if( $difference < $heure_defaut*3600 )
		{
			echo 'Il y a ';
			if (date('G',$difference)!=0)
				echo date('G\h',$difference);
			elseif (date('i',$difference)!="00")
				echo date('i\m',$difference);
			else echo date('s\s',$difference);
		}
		//Si c'est il y a plus de trois heures
		else
			echo 'Aujourd\'hui';
	//Si c'est hier
	else if((date('d') - 1) == date('d', $insc) AND date('mY') == date('mY', $insc))
	    echo 'Hier';
	//Si c'est une autre date
	else
		echo date('le d/m/Y', $insc) ;

	//Puis affichage de l'heure si on est à plus de 3 heures
	if( ,$difference) $heure_defaut*3600 )
		echo  date('à H\hi', $insc).'</div></li>';
?>
0
will.smith Messages postés 264 Statut Membre 10
 
merci mais là


Parse error: syntax error, unexpected ',' in /mnt/144/sdb/b/c/monsite/forum/voirprofil.php on line 100
ca correspond

//Puis affichage de l'heure si on est à plus de 3 heures
if( ,$difference) $heure_defaut*3600 )
echo date('à H\hi', $insc).'</div></li>';
merci de ton aide
0
Alkaaran Messages postés 291 Statut Membre 37
 
Raah je me suis précipité : if( $difference >= $heure_defaut*3600 )
0
will.smith Messages postés 264 Statut Membre 10
 
lol excuse moi mais je me suis déconnecté et reconnecté juste pour voir s'il me met 2 s où 3 s et 1 mn mais il m'affiche

Il y a 1h au lieu d'affiché les seconde et puis les minutes

merci
0
Alkaaran Messages postés 291 Statut Membre 37
 
Bon ca commence à me saouler on va la faire à la barbare :p

			echo 'Il y a ';
			if ($difference>3600)
				echo date('G\h',$difference);
			elseif ($difference > 60)
				echo date('i\m',$difference);
			else echo date('s\s',$difference);
0
will.smith Messages postés 264 Statut Membre 10
 
lol non il faut pas dire ca te soul

mais il affiche toujours 1 h escuse moi lo
0
Peequatchou
 
En tout cas, y'a du Timestamp dans l'air .
0
will.smith Messages postés 264 Statut Membre 10
 
lol et pour le pb il faut que je fasse quoi car si tu dit juste En tout cas, y'a du Timestamp dans l'air .

ca vas vraiment m'aidé lol
0
Peequatchou
 
Désolé, je croyais que ça aiderait .

Décidément, c'est pas mon jour ...
0
will.smith Messages postés 264 Statut Membre 10
 
et si tu pense savoir tu penserais mettre quoi
0
Alkaaran Messages postés 291 Statut Membre 37
 
Met nous ton code actuel, parce que je comprends pas que ca marche pas la ... Tu as peut être mal copié/compris mes changements ;)
0
will.smith Messages postés 264 Statut Membre 10
 
re

 $insc = $data1['membre_derniere_visite'];
	$difference = time() - $insc;
	$heure_defaut = 3;
	echo '<li><div class="texte_blanc">Dernière visite : ';

	//Si c'est aujourd'hui
	if(date('dmY') == date('dmY', $insc))
		//Si c'est il y a moins de 3 heures
		if( $difference < $heure_defaut*3600 )
		{
			echo 'Il y a ';
			if (date('G',$difference)!=0)
				echo date('G\h',$difference);
			elseif (date('i',$difference)!="00")
				echo date('i\m',$difference);
			else echo date('s\s',$difference);

		}
		//Si c'est il y a plus de trois heures
		else
			echo 'Aujourd\'hui ';
	//Si c'est hier
	else if((date('d') - 1) == date('d', $insc) AND date('mY') == date('mY', $insc))
	    echo 'Hier ';
	//Si c'est une autre date
	else
		echo date('le d/m/Y', $insc) ;

	//Puis affichage de l'heure si on est à plus de 3 heures
	if( $difference >= $heure_defaut*3600 ) 
		echo  date(' à H\hi', $insc).'</div></li>';


merci de ton aide

ps j'ai démandé à quelqu'un qui m'a dit juste ça enfin si ça peut aidé

Bonsoir,

Pour ton premier souci :

$difference n'est pas une date, mais une durée,
il me semble (mais je peux me tromper),
que, conceptuellement, le problème vient de là.

En effet, la fonction date() retourne une date, pas une durée.

Hors, comme la date qu'elle retourne
part du 1er janvier 1970 00:00:00 GMT. 
Avec le décalage horaire de 1 heure,
si $difference vaut 5 par exemple,
elle te retourne 1er janvier 1970 01:00:05
et tu affiches : dernière connexion il y a 1 heure,
ce qui est évidemment faux.

Mais, on peut aussi remarquer que,
le temps qui s'est écoulé depuis la dernière connexion
n'est pas égal à 1er janvier 1970 01:00:05.
Donc,
même si,
en bidouillant avec le fuseau horaire,
tu arrivais à tes fins (1er janvier 1970 00:00:05),
je ne suis pas sûr que ce serait la meilleure solution.

Pour ce tu veux faire l'opérateur modulo(%) est peut-être plus approprié.

Citation:
($difference-($difference%3600))/3600 = nombre d'heures
($difference%3600-$difference%60)/60 = nombre de minutes
$difference%60 = nombre de secondes  


Quant au second souci :

Plutôt que date(),
il y a la fonction strftime()
précédée de la fonction setlocale()
qui permet de formater les dates en français.
0
will.smith Messages postés 264 Statut Membre 10
 
un petit up

merci
0
Alkaaran Messages postés 291 Statut Membre 37
 
Oui désolé c'est le week end je suis moins actif ^^

Alors voila un code entier qui devrait fonctionner (je précise que ton ami a raison et c'est ce que je faisait dans mon précédent post) :

    $insc = $data1['membre_derniere_visite'];
	$difference = time() - $insc;
	$heure_defaut = 3;
	echo '<li><div class="texte_blanc">Dernière visite : ';

	//Si c'est aujourd'hui
	if(date('dmY') == date('dmY', $insc))
		//Si c'est il y a moins de 3 heures
		if( $difference < $heure_defaut*3600 )
		{
			echo 'Il y a ';
			if ($difference >= 3600)
				echo strftime("%lh",$difference);
			elseif ($difference >= 60)
				echo strftime('"%Mm",$difference);
			else echo strftime('%Ss',$difference);

		}
		//Si c'est il y a plus de trois heures
		else
			echo 'Aujourd\'hui ';
	//Si c'est hier
	else if((date('d') - 1) == date('d', $insc) AND date('mY') == date('mY', $insc))
	    echo 'Hier ';
	//Si c'est une autre date
	else
		echo date('le d/m/Y', $insc) ;

	//Puis affichage de l'heure si on est à plus de 3 heures
	if( $difference >= $heure_defaut*3600 ) 
		echo  date(' à H\hi', $insc).'</div></li>';
0
will.smith Messages postés 264 Statut Membre 10
 
merci ce n'est pas grave il y as une érreur


Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /mnt/144/sdb/b/c/le.coffre/forum/voirprofil.php on line 90

{
			echo 'Il y a ';
			if ($difference >= 3600)
				echo strftime("%lh",$difference);
			elseif ($difference >= 60)
				echo strftime('"%Mm",$difference);
			else echo strftime('%Ss',$difference);

		}
		//Si c'est il y a plus de trois heures
		else
			echo 'Aujourd\'hui ';


je pense que tu a oublié un ; où ' tu me diras en attendant je vais éssayé
0
Alkaaran Messages postés 291 Statut Membre 37
 
Arf désolé erreur d'écriture en effet :)
{
			echo 'Il y a ';
			if ($difference >= 3600)
				echo strftime("%lh",$difference);
			elseif ($difference >= 60)
				echo strftime("%Mm",$difference);
			else echo strftime('%Ss',$difference);

		}
		//Si c'est il y a plus de trois heures
		else
			echo 'Aujourd\'hui ';
0
will.smith Messages postés 264 Statut Membre 10
 
ca marché là il met les seconde je t'en remerci

mais bon comme il y as toujour un mais

donc le souci dés que je réactualise ca saute 5 seconde par 5 au lieu de faire normalement 1 2 3 etc.... lol

merci de ton aide
0
Alkaaran Messages postés 291 Statut Membre 37
 
Hum, la j'ai pas de réponse :s

A chaque fois 5 ?!? c'est quand meme bizarre
0