Doctrine : comparer 2 date

Fermé
btm - Modifié par jordane45 le 15/02/2016 à 12:40
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 - 16 févr. 2016 à 12:11
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.
A voir également:

2 réponses

jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739
Modifié par jordane45 le 15/02/2016 à 11:57
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
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
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739
15 févr. 2016 à 12:22
De quel format est le champ qui contient tes dates ???
Ce n'est pas du varchar j'espère. ....
0
oui c'est un varchar !
0
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739 > btm
15 févr. 2016 à 12:29
Une date.... ça se stocke dans un champ...DATE ou DATETIME ou encore TIMESTAMP .... pas au format text !
Commence par corriger ça.
0
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
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
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739
16 févr. 2016 à 10:51
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
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
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739 > btm
Modifié par jordane45 le 16/02/2016 à 11:12
...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
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
jordane45 Messages postés 38446 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 28 février 2025 4 739 > btm
Modifié par jordane45 le 16/02/2016 à 11:33
.... 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