Partage
  • Partager sur Facebook
  • Partager sur Twitter

Date Mysql en date PHP

    11 octobre 2020 à 19:09:18

    Bonjour à tous !

    J'ai fais un petit forum où l'on peut poster des messages; et je voudrais que pour la date du message ça soit marqué il y a moins de ... minutes ou heure ou jour(comme sur Snapchat par exemple) ! Enfaite je fais une requête pour prendre la date et que ça soit marqué comme ci-dessus, mais le problème c'est que j'arrive pas à calculer temps msql moins le temps actuelle en php !

    Mon code :

    <?php 
    
      include 'bdd_connect.php';
    
       
       $req = $bdd->prepare('SELECT * FROM annonce');
        $req->execute();
         
         while($data_req = $req->fetch())
         {
    
            $now_time = date_actuelle php - date mysql
              
             echo "<p>Il y a moins de ".$now_time."</p>";
         }
    
    ?>



    Si vous savez comment faire je suis preneur ! 

    Merci à vous !

    • Partager sur Facebook
    • Partager sur Twitter
      11 octobre 2020 à 21:41:39

      Salut

      Tu peux convertir les dates retournées par MySQL en objets DateTime de PHP. Ces objets disposent de méthodes pour être soustraits les uns aux autres, ce qui retourne un autre objet (de type DateTimeInterval) contenant la différence de temps, et cet autre objet peut être formaté pour afficher la durée. Il possède aussi diverses propriétés qui permettent de tester le temps écoulé.

      -
      Edité par Ymox 12 octobre 2020 à 8:20:47

      • Partager sur Facebook
      • Partager sur Twitter
        12 octobre 2020 à 12:37:00

        Ymox a parfaitement raison.

        Maintenant, tu peux aussi interroger la bdd sur ces différences. C'est super simple :

        select champdate, DATEDIFF(champdate, CURDATE()) as differenece from matable 


        Tu as la date et la différence (en jours) entre la date du champ et l'actuelle.

        • Partager sur Facebook
        • Partager sur Twitter
          14 octobre 2020 à 13:00:38

          Domi65 a écrit:

          Ymox a parfaitement raison.

          Maintenant, tu peux aussi interroger la bdd sur ces différences. C'est super simple :

          select champdate, DATEDIFF(champdate, CURDATE()) as differenece from matable 


          Tu as la date et la différence (en jours) entre la date du champ et l'actuelle.


          Merci  beaucoup pour vos aides ! Ca marche ! Mais le problème c'est je voudrais mettre il y a moins de heure/minutes aussi... Savez-vous comment faire ?

          merci !

          • Partager sur Facebook
          • Partager sur Twitter
            14 octobre 2020 à 13:13:07

            En PHP, tu pourrais vérifier si tu as des heures ou des jours et faire le formatage en fonction. C'est certainement possible aussi en SQL, mais je suis moins au fait des fonctions sur des durées (et celui qui propose des fonctions pour traiter des durées comme des dates, je lui offrirai de la confiture de mûres "pure framboises", vu que seule la couleur change, c'est la même chose aussi).

            • Partager sur Facebook
            • Partager sur Twitter
              14 octobre 2020 à 13:16:25

              Ymox a écrit:

              En PHP, tu pourrais vérifier si tu as des heures ou des jours et faire le formatage en fonction. C'est certainement possible aussi en SQL, mais je suis moins au fait des fonctions sur des durées (et celui qui propose des fonctions pour traiter des durées comme des dates, je lui offrirai de la confiture de mûres "pure framboises", vu que seule la couleur change, c'est la même chose aussi).


              Ok merci :D ! Mais comment prendre une donnée de la bdd et voir si c'est une heure ou une minutes ?
              • Partager sur Facebook
              • Partager sur Twitter
                14 octobre 2020 à 13:21:54

                Ben tu fais le calcul de différence, et tu regardes ce qu'il en est… Soit tu fais la différence en SQL, tu regardes comment c'est au niveau format (je crois me souvenir que c'est quelque chose comme HHH:MM:SS) et tu vérifies donc ce que tu as pour les heures, les minutes, etc., soit tu fais en PHP et tu regardes les propriétés de l'objet DateInterval, comme indiqué précédemment. Vraiment, si tu prends la version PHP, prends le temps d'aller regarder la documentation, s'il te plaît.

                • Partager sur Facebook
                • Partager sur Twitter
                  17 octobre 2020 à 13:09:29

                  Bonjour !

                  Merci pour tout vos renseignements ! J'ai fais mon code avec la fonction DateTime et ça me renvoie des choses bizarres... J'ai essayé mon petit bout de code en insérant un nouveau message dans la bdd et j'ai reçu 57 minutes puis après ça baisse alors que normalement ça devrai m'afficher juste 2 ou 3 minutes puis ça devrai augementer... Je ne comprend pas pourquoi...

                  Voici mon code

                  $req = $bdd->prepare('SELECT date_annonce, id FROM annonce ORDER BY date_annonce DESC LIMIT 0,1');
                     $req->execute();
                  
                      while($data_date = $req->fetch())
                      {
                  
                  
                        $origin = date_create(date("Y-m-d H:i:s"));
                   $target = date_create($data_date['date_annonce']);
                   $interval = date_diff($origin, $target);
                  
                   
                      if($interval->format('%i%') <= "1")
                      {
                        echo "<p>Il y a moins de ".$interval->format('%i%')." minute</p>";
                      }
                      if($interval->format('%i%') <= "59" AND $interval->format('%i%') > "2")
                      {
                        echo "<p>Il y a ".$interval->format('%i%')." minutes </p>";
                      }
                  
                  
                  
                         
                      }

                  Merci !

                  -
                  Edité par KiripouZz 17 octobre 2020 à 13:12:08

                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 octobre 2020 à 22:06:12

                    Je pense que tu as inversé les rôles de $origin et de $target.

                    Je trouve aussi que c'est plutôt alambiqué de créer la date du moment sous forme de chaîne puis de la faire analyser pour créer un objet, ligne 8. C'est un peu comme imprimer du texte pour le faxer au lieu d'envoyer un e-mail. Il serait plus pratique de créer directement un objet, non ? $laMemeChoseQueDansOrigin = new \DateTime();.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Date Mysql en date PHP

                    × 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