Souci pour une fonction date

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

Résumé de la discussion

Un script PHP vise à afficher automatiquement la date de la dernière visite avec des conditions 'Aujourd'hui' et 'Hier', mais retourne un timestamp brut comme 1245148111. Des réponses proposent de calculer la différence via time() et d'afficher des formules 'Il y a X heures', 'Aujourd'hui' ou 'Hier', puis d'afficher l'heure exacte si nécessaire. La meilleure approche propose de calculer $difference = time() - $insc, de fixer $heure_defaut = 3 et d'afficher 'Il y a X heures', 'Aujourd'hui à HHhMM', 'Hier à HHhMM' ou la date complète. En pratique, certains suggèrent d'enregistrer la dernière visite au moment de la connexion et, si nécessaire, du statut de connexion pour calculer précisément la durée et afficher les nuances temporelles.

Bobot (l’IA à votre service)
  1. 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
    1. 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
      1. 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
        1. 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
          1. 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
            1. 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. Raah je me suis précipité : if( $difference >= $heure_defaut*3600 )
                0
            2. 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
              1. 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
                1. lol non il faut pas dire ca te soul

                  mais il affiche toujours 1 h escuse moi lo
                  0
                  1. En tout cas, y'a du Timestamp dans l'air .
                    0
                    1. 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
                      1. Désolé, je croyais que ça aiderait .

                        Décidément, c'est pas mon jour ...
                        0
                        1. et si tu pense savoir tu penserais mettre quoi
                          0
                          1. 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
                            1. 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
                              1. 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
                                1. 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
                                  1. 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
                                    1. 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. Hum, la j'ai pas de réponse :s

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