Doctrine : comparer 2 date

btm -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,
je travaille sur un projet symfony 2 et je veut compter le nombre d'employée qui ont date fin essai aprés moin d'un mois
Voila je rencontre un petit problème avec mon code.

  $Essai1_numberC = $this->container->get('doctrine')->getManager('Mysql')->getRepository('monprojetBundle:employee')
                    ->createQueryBuilder('r')  
                    ->where('DATE_DIFF( r.DateFinEssai , CURRENT_DATE()) < 32 AND r.DateFinEssai IS NOT NULL AND r.EnEssai = 1 ') 
                    ->getQuery()
                    ->getResult(); 
            $Essai1_number = count($Essai1_numberC) ; 


et le nombre que j'obtient n'est pas correct
je ne sais pas pourquoi ça ne marche pas correctement !!!!
merci pour votre aide :)

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    Bonjour,

    As tu testé ta requête DIRECTEMENT dans ta BDD (c'est à dire... sans passer par php mais via phpmyadmin par exemple ) ??

    As tu essayé quelque chose du genre :
    SELECT count(*) as NB 
    FROM tatable r
    WHERE r.DateFinEssai > NOW() - INTERVAL 1 MONTH
    


    Cordialement, 
    Jordane                                                                 
    0
    1. btm
       
      salut jordane45
      j'ai tester cette requête directement dans phpMyadmin et ça donne 0
      malgré que j'ai un employée dont la datefinessai est "22/02/2016"
      0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      De quel format est le champ qui contient tes dates ???
      Ce n'est pas du varchar j'espère. ....
      0
    3. btm
       
      oui c'est un varchar !
      0
    4. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > btm
       
      Une date.... ça se stocke dans un champ...DATE ou DATETIME ou encore TIMESTAMP .... pas au format text !
      Commence par corriger ça.
      0
    5. btm
       
      nn je la fais exprès
      mais il y'a des moyen pour convertir une chaine de caractère en date
      as tu une idée sur ??
      0
  2. btm
     
    bonjour
    j'ai essayé avec la solution de jordane45 mais ça na pas marché
    y'a il une moyen pour convertir r.DateFinEssai de table employee de chaine de caractère en date ??
    merci tout le monde .
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Re,


      j'ai essayé avec la solution de jordane45 mais ça na pas marché

      Et ... peux tu nous montrer comment tu as essayé de t'en servir ??
      0
    2. btm
       
      j'ai essayé de convertir r.DateFinEssai
      -> where('DATE_DIFF(date_format(str_to_date( r.DateFinEssai , "%d/%m/%Y"), "%Y-%m-%d"), CURRENT_DATE()) < 32 AND r.DateFinEssai IS NOT NULL AND r.EnEssai = 1 ')

      et méme :

      -> where('DATE_DIFF( str_to_date( r.DateFinEssai , "%d/%m/%Y") , CURRENT_DATE()) < 32 AND r.DateFinEssai IS NOT NULL AND r.EnEssai = 1 ')

      est ce que c'est pas correct comme ça ??
      0
    3. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > btm
       
      ...mais... dis moi.... as tu testé

      DIRECTEMENT

      dans ta BDD au moins ??????
      Ca ne sert à rien d'écrire des requêtes dans ton code PHP si tu n'as pas pris la peine de les essayer directement dans ta BDD (en passant par phpMyadmin par exemple).
      Sinon... comment savoir si la requête fonctionne ????

      Par exemple, commence par faire :
      SELECT   r.DateFinEssai
                    ,date_format(str_to_date( r.DateFinEssai , "%d/%m/%Y"), "%Y-%m-%d") as DATE_EN
                    ,DATE_DIFF(date_format(str_to_date( r.DateFinEssai , "%d/%m/%Y"), "%Y-%m-%d"), CURRENT_DATE()) as D_DIFF
      FROM tatable
      WHERE r.DateFinEssai IS NOT NULL
      LIMIT 100
      

      et regardes si DATE_EN donne le résultat attendu. (c'est à dire.. le "bon" format de date )
      Idemn pour D_DIFF ... la différence est-elle bonne ??

      ==>> je t'invite à nous poster sur le forum le résultat de cette requête !
      0
    4. btm
       
      lorsque j'ai essayée directement dans lla base , il y'a une erreur lors de l'utilisation de DATE_DIFF ( fonction non définie ) alors j'ai essaye avec la requête :

      SELECT 'DateFinEssai',date_format(str_to_date( 'DateFinEssai' , "%d/%m/%Y"), "%Y-%m-%d") as DATE_EN FROM employee WHERE 'DateFinEssai' IS NOT NULL LIMIT 100

      la résultat est le tableau suivant :

      DateFinEssai DATE_EN
      DateFinEssai NULL
      DateFinEssai NULL
      DateFinEssai NULL
      DateFinEssai NULL
      DateFinEssai NULL
      DateFinEssai NULL
      DateFinEssai NULL

      malgré que le contenus du colonne DateFinEssai est

      DateFinEssai
      NULL
      NULL
      22/02/2016
      09/02/2016
      20/04/2016
      23/04/2016
      NULL
      0
    5. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > btm
       
      .... Où as tu vu... dans MA requête ... qu'il y a des QUOTES autour de nom du champ DateFinEssai ?

      Peux tu essayer ceci :
      SELECT DateFinEssai
            ,date_format(str_to_date( DateFinEssai , "%d/%m/%Y"), "%Y-%m-%d") as DATE_EN 
      FROM employee 
      WHERE DateFinEssai IS NOT NULL 
      LIMIT 100 
      


      NB : **** Attention ****
      Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
      Explications disponibles ici :
      https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

      .
      0