Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Résolu] - Gestion des dates

    19 mars 2019 à 19:39:16

    Bonjour,

    je me permets de vous contacter car j'essaie de faire en sorte d'afficher depuis quand mes articles ont été publiés sur mon site mais mon code ne marche pas même après plusieurs vérifications:

    <?php
    		$reponse=$bdd->query('SELECT id, titre, contenu, auteur, date_publication, name_publication, name_Miniature, Vues, category FROM publication ORDER BY date_publication DESC');
    		?>
    		<ul>
    		<?php
    		while($donnees=$reponse->fetch())
    		{
    			$since = AffDate($donnees['date_publication']);
    		?>
    			<li>
    				<a href="Publication.php?id=<?php echo $donnees['id']; ?>">
    					<p>
    						<img src="Uploads/<?php echo $donnees['auteur']; ?>/<?php echo $donnees['name_Miniature']; ?>" width="205px" /><br />
    						<?php echo '<strong>'.htmlspecialchars($donnees['titre']).'</strong><br />'.htmlspecialchars($donnees['auteur']).' <br />'
    						.htmlspecialchars($donnees['Vues']).' vues . '. $since .' <span class='.htmlspecialchars($donnees['category']).'>'.htmlspecialchars($donnees['category']).'</span> 
    						'?>
    					</p>
    				</a>
    			</li>
    		<?php
    		}
    		$reponse->closeCursor();
    		?>
    		</ul>
    		<?php function AffDate($date){
     
    		if(!ctype_digit($date))
    			$date = strtotime($date);
    		
    		if(date('Ymd', $date) == date('Ymd')){
    			$diff = time()-$date;
    				
    			if($diff < 60) /* moins de 60 secondes */
    				return 'A l\'instant';
    			
    			else if($diff < 3600) /* moins d'une heure */
    				return round($diff/60, 0).' min';
    			
    			else if($diff < 86400) /* moins de 12 heures */
    				return round($diff/3600, 0).' h' ;
    		}
    		
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 1 DAY')))
    				return '1j';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 2 DAY')))
    				return '2 j';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 3 DAY')))
    				return '3 j';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 4 DAY')))
    				return '4 j';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 5 DAY')))
    				return '5 j';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 6 DAY')))
    				return '6 j';
    
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 7 DAY')))
    				return '1 sem';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 14 DAY')))
    				return '2 sem';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 21 DAY')))
    				return '3 sem';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 28 DAY')))
    				return '4 sem';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 30 DAY')))
    				return '1 mois';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 60 DAY')))
    				return '2 mois';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 90 DAY')))
    				return '3 mois';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 120 DAY')))
    				return '4 mois';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 150 DAY')))
    				return '5 mois';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 180 DAY')))
    				return '6 mois';
    
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 210 DAY')))
    				return '7 mois';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 240 DAY')))
    				return '8 mois';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 270 DAY')))
    				return '9 mois';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 300 DAY')))
    				return '10 mois';
    				
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 330 DAY')))
    				return '11 mois';
    			
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 360 DAY')))
    				return '1 an';
    
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 720 DAY')))
    				return '2 an';
    
    			else if(date('Ymd', $date) == date('Ymd', strtotime('- 1080 DAY')))
    				return '3 an';
    		} ?>

    J'ai donc deux problèmes:

    1. La balise span qui doit afficher depuis quand mon article à été publié n'affiche rien. 

    2. Après modification de la date de publication de un de mes articles, ma bdd modifie ma date avec des zero jusqu'à 10-6. A ce moment l'affichage de la balise span marche mais ma variable $since ne prend que la première date de mon premier article de ma bdd. En d'autre terme ça affiche ce que je veux seulement pour le premier article.

    Comment résoudre ces deux problèmes? Je ne veux pas avoir à modifier mes dates à chaque fois ! Pourquoi ma bdd se met à afficher la date de publication à la millionième de seconde quand je la modifie?

    ps: Ma date est au format DATETIME et une fois que ma bdd à mis plein de 0 après la seconde je ne peux plus les enlever même en les effaçant ça revient !!! De plus mon code ne marche que lorsque il y a ces zéro qui apparaissent suite à une modification. Enfin, ça marche que pour le premier article...

    En espérant avoir été clair.

    Je vous serais très reconnaissant de biee vouloir m'aider.

    lulu74520

    -
    Edité par lulu74520 21 mars 2019 à 8:12:45

    • Partager sur Facebook
    • Partager sur Twitter
      19 mars 2019 à 23:58:33

      Bonjour,

      Tu dis que ta date est au format DATETIME dans ta BDD, ce n'est donc pas un TIMESTAMP. Le test (!ctype_digit) est donc inutile ce n'est jamais vrai, par contre a-tu vérifié que la conversion strtotime marche bien? ça dépend du format SQL, pour le coup c'est pas gagné. Fais un echo pour le vérifier.

      Mon diagnostic c'est que ta date n'est pas transformée et ça ne passe dans aucun de la douzaine de if imbriqué. Et comme il n'y a pas de else au final ça ne renvoie rien.

      Pour le 2: comment tu modifie ta date pour que ça marche? l'affichage avec 10-6 tu le vois ou et ça ressemble à quoi? En tout cas, c'est pas une date?

      • Partager sur Facebook
      • Partager sur Twitter
        20 mars 2019 à 19:02:55

        Salut !!!

        J'ai trouvé !

        Merci bien, la condition bloquait tout comme tu l'as dit mais également parce que j'ai mis == à mes conditions alors que c'est >=

        ps: je modifiais ma date via phpMyAdmin et je sais pas pourquoi les zéro apparaissent lors de la modification mais bon ça marche maintenant

        Voici le code: 

        <?php function AffDate($date){
        
        		$date = strtotime($date);
        
        		
        		if(date('Ymd', $date) == date('Ymd')){
        			$diff = time()-$date;
        				
        			if($diff < 60) /* moins de 60 secondes */
        				return 'A l\'instant';
        			
        			else if($diff < 3600) /* moins d'une heure */
        				return round($diff/60, 0).' min';
        			
        			else if($diff < 86400) /* moins de 12 heures */
        				return round($diff/3600, 0).' h' ;
        		}
        		
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 1 DAY')))
        				return '1j';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 2 DAY')))
        				return '2 j';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 3 DAY')))
        				return '3 j';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 4 DAY')))
        				return '4 j';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 5 DAY')))
        				return '5 j';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 6 DAY')))
        				return '6 j';
        
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 7 DAY')))
        				return '1 sem';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 14 DAY')))
        				return '2 sem';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 21 DAY')))
        				return '3 sem';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 28 DAY')))
        				return '4 sem';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 30 DAY')))
        				return '1 mois';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 60 DAY')))
        				return '2 mois';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 90 DAY')))
        				return '3 mois';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 120 DAY')))
        				return '4 mois';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 150 DAY')))
        				return '5 mois';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 180 DAY')))
        				return '6 mois';
        
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 210 DAY')))
        				return '7 mois';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 240 DAY')))
        				return '8 mois';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 270 DAY')))
        				return '9 mois';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 300 DAY')))
        				return '10 mois';
        				
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 330 DAY')))
        				return '11 mois';
        			
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 360 DAY')))
        				return '1 an';
        
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 720 DAY')))
        				return '2 an';
        
        			else if(date('Ymd', $date) >= date('Ymd', strtotime('- 1080 DAY')))
        				return '3 an';
        
        			else
        			{
        				echo 'lomgtemps';
        			}
        		} ?>



        • Partager sur Facebook
        • Partager sur Twitter

        [Résolu] - Gestion des dates

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown