IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

différence entre deux heures [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 8
    Par défaut différence entre deux heures
    Salut à tous!

    Je travaille sur un projet depuis un certain temps! Cela dit j'ai une table dans ma BDD dans la quelle j'ai deux champs de type Time: heure début (hd) et heure fin (hf). J'aimerais donc faire la difference entre hf et hd.

    Je sais que une requete SQL pour sa, sa s'écrirait:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TIMEDIFF(`hf`,`hd`)duree FROM `oi` WHERE `noi`=1

    Chose qui ne marche pas sous SF2 car la Fonction TIMEDIFF n'est pas reconnue par doctrine!

    Cependant, j'ai ajouter un champ $duree qui doit etre renseigné automatiquement par la différence entre les deux heures ($hf et $hd) à l'envoie du formulaire d'enregistrement!

    J'ai essayer de faire ceci dans mon controller:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $hd = $oi->getHd();
    $hf = $oi->getHf();
    // $x= $hf-$hd;
    $x = $hf->diff($hd);
    $oi->setDuree($h);
    Mais rien ne se passe dans ma table: le champ duree reste toujours 00:00:00!!

    Comment m'y prendre SVP de l'AIDE!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Il est possible d’étendre Doctrine pour la prise en compte des fonctions spécifiques :
    http://www.doctrine-project.org/2010...html#date-diff
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 8
    Par défaut
    J'avais déjà regarder dans ce liens, mais j'avoue que je n'y comprends pas exactement commment implémenté cela!
    Tu pourrais me guider un peu stp?!

  4. #4
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    L'utilisation des objets DateTime et l'utilisation de la méthode diff et bien plus simple. Je pense que tu n'étais pas loin sauf que quand je reprends ton morceau de code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $hd = $oi->getHd();
    $hf = $oi->getHf();
     
    // $x = $hf->diff($hd); $x pas utilisé, et $h pas initialisé ?
     
    $h = $hf->diff($hd);
    $oi->setDuree($h);
    Quel est le type de paramètre attendu dans la méthode setDuree() ? Un entier (nb de minutes ? d'heures ? de jour ? de mois ?) ? Un DateInterval ? Du texte ?

    Selon ta réponse à ta question il faudra encore appliquer le $h->format() adéquat avec le bon paramètre dans format.
    => http://php.net/manual/fr/datetime.diff.php

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 8
    Par défaut
    Salut! Merci deja pour ta contribution! Effectivement le code exact c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $hd = $oi->getHd();
    $hf = $oi->getHf();
    $x = $hf->diff($hd);
    $oi->setDuree($x);
    Et comme tu l'a demandé
    Quel est le type de paramètre attendu dans la méthode setDuree() ? Un entier (nb de minutes ? d'heures ? de jour ? de mois ?) ? Un DateInterval ? Du texte ?
    le paramètre attendu est de type TIME(Heures, Minutes et Secondes)

    Et maintenant j'ai appliquer le $->format() comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
          $hd = $oi->getHd(); 
          $hf = $oi->getHf();
     
          $h= $hd->diff($hf);
          $x = $h->format('H:i:s');
          $oi->setDuree($x);
    Je retrouve cette erreur:
    Error: Call to a member function format() on a non-object in C:\wamp\www\djago_i\vendor\doctrine\dbal\lib\Doctrine\DBAL\Types\TimeType.php line 53
    Que dois-je faire?

  6. #6
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    Assure toi que $hd et $hf soient des objets DateTime.
    Assure toi que $h est bien un objet DateInterval.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 8
    Par défaut
    Exact! j'ai bien vérifier : j'ai meme fait un var_dump sur $h j'obtient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    object(DateInterval)[1212]
      public 'y' => int 0
      public 'm' => int 0
      public 'd' => int 0
      public 'h' => int 4
      public 'i' => int 0
      public 's' => int 0
      public 'weekday' => int 0
      public 'weekday_behavior' => int 0
      public 'first_last_day_of' => int 0
      public 'invert' => int 0
      public 'days' => int 0
      public 'special_type' => int 0
      public 'special_amount' => int 0
      public 'have_weekday_relative' => int 0
      public 'have_special_relative' => int 0
    J'ai un peu corriger la syntaxe de J'ai fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $oi->setDuree(new \DateTime($x));
    Et la maintenant j'ai cette erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateTime::__construct(): Failed to parse time string (H:i:s) at position 1 (:): Unexpected character
    Je me dis peut-etre que la solution n'est plus vraiment loin

  8. #8
    Membre Expert Avatar de Nico_F
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2011
    Messages : 728
    Par défaut
    La solution est peut-être pas loin mais la doc par contre...
    Regarde ce que tu es en train de faire : tu cherches à formater un intervalle sous forme d'heure en disant que c'est une durée.

    Première question : t'es tu penché sur la manière dont on formatait un intervalle ? => RTFM => http://php.net/manual/fr/dateinterval.format.php
    Deuxième question : qu'est-ce que tu attends en paramètre de setDuree() ? Une heure ? Un intervalle ? Un nombre de secondes/minutes/heures/jours ?
    Troisième question : pourquoi essayes-tu de transformer un intervalle en format time ? Ça n'a pas de sens.

    Je crois que tu t'es focalisé sur les messages d'erreur que tu ne comprends pas, et que tu as perdu de vue la logique de ce que tu veux faire.
    Je ne peux pas t'aider plus : commence par être au clair avec ce que tu veux faire avant de chercher comment le faire.

    courage ++

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2013
    Messages : 8
    Par défaut
    Ca y est! Merci Bien Nico_F

    Il s'agissait bien du formatage!!
    en lieu et place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $x = $h->format('H:i:S');
    j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $x = $h->format('%H:%I:%S');
    Et C'est Ok!! Merci Pour Tout chers amis!!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Dates] Différence entre deux heures
    Par covin85 dans le forum Langage
    Réponses: 2
    Dernier message: 26/09/2008, 19h47
  2. Différence entre deux heures en minutes ?
    Par moi&dev dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/08/2007, 11h39
  3. problème différence entre deux heures
    Par gwenhael dans le forum Langage
    Réponses: 2
    Dernier message: 14/09/2006, 15h16
  4. Réponses: 7
    Dernier message: 05/07/2006, 16h29
  5. [Dates] Calcul d'une différence entre deux heures
    Par loreleï85 dans le forum Langage
    Réponses: 12
    Dernier message: 28/06/2006, 11h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo