Souci pour une fonction date

will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   -  
will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   -
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
Configuration: Windows XP Internet Explorer 7.0

29 réponses

  • 1
  • 2
  1. 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
  2. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
  3. 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
  4. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 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
  7. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
    1. Alkaaran Messages postés 291 Statut Membre 37
       
      Raah je me suis précipité : if( $difference >= $heure_defaut*3600 )
      0
  8. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
  9. 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
  10. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   10
     
    lol non il faut pas dire ca te soul

    mais il affiche toujours 1 h escuse moi lo
    0
  11. Peequatchou
     
    En tout cas, y'a du Timestamp dans l'air .
    0
  12. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
  13. Peequatchou
     
    Désolé, je croyais que ça aiderait .

    Décidément, c'est pas mon jour ...
    0
  14. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   10
     
    et si tu pense savoir tu penserais mettre quoi
    0
  15. 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
  16. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
  17. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   10
     
    un petit up

    merci
    0
  18. 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
  19. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
  20. 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
  21. will.smith Messages postés 230 Date d'inscription   Statut Membre Dernière intervention   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
    1. 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
  • 1
  • 2