Brave publisher PUBLISHER
Développeur web Front-End dans l'Oise - Gary Deshayes

Doctrine, Symfony | Différence entre deux dates sous MySQL (Jour, mois, années...)

Développeur web Front-End dans l'Oise - Gary Deshayes <--Translation

Crée le : jeudi 18 juin 2020

Comment connaître la différence entre deux dates sous MySQL ?

Il vous faut utiliser la méthode TimeStampDiff qui prends 3 paramètres (l'unité, la première date, la seconde date) et vous retourne un chiffre correspondant à la différence d'unité entre les dates.

Exemple : 

//Année
TIMESTAMPDIFF(YEAR, 2019-01-01, 2022-01-01)
Sortie : 3 pour les 3 ans de différence

//Mois 
TIMESTAMPDIFF(MONTH, 2019-01-01, 2019-06-01)
Sortie : 5 pour les 5 mois de différence

//Jour
TIMESTAMPDIFF(DAY, 2019-01-01, 2019-01-16)
Sortie : 15 pour les 15 jours de différence

//Minutes
TIMESTAMPDIFF(MINUTE, 2019-01-01 12:45:00, 2019-01-16 13:45:00)
Sortie : 60 pour les 60 minutes de différence

Voir plus de détails sur ce lien qui explique en détails la fonction SQL TIMESTAMPDIFF

Comment utiliser la fonction SQL TimeStampDiff sous Doctrine avec Symfony ?

Il vous faut pour cela installer le package Beberlei Doctrine Extensions qui est un package complet et facile à prendre en main pour utiliser les fonctions SQL sous Doctrine.

Une fois le package installé, il faut initialiser chaque fonctions que vous souhaitez utiliser dans le fichier de config de Doctrine comme ceci : 

doctrine:
     dbal: ...
     orm: ...
     dql: 
         datetime_functions:
             TimestampDiff: DoctrineExtensions\Query\Mysql\TimestampDiff

Il est possible de retrouver toutes les fonctions du package Beberlei dans le dossier vendor à son nom.

Ensuite pour utiliser la fonction dans une requete DQL dans un Repository Symfony :

Exemple d'une requete pour récupérer des utilisateurs en fonction de la date de connexion : 

public function getUsersDateConnexion(){
        $query = $this->createQueryBuilder('users')
                      ->join('u.historiqueConnexions', "connexion")
                      ->having("TIMESTAMPDIFF(MONTH, MAX(connexion.dateConnexion), CURRENT_DATE()) >= 36");
        return $query->getQuery()->getResult();
}

Cette fonction permet dans cet exemple de récupérer des utilisateurs non connectés depuis 36 mois, nous voyons dans le ->having que nous pouvons utiliser la fonction SQL TimeStampDiff

 

Merci d'avoir lu, n'hésitez pas à partager !

Articles récents :

Symfony 5 | Retourner une image via une route d'un controller

Symfony

Crée le : mercredi 1 septembre 2021

VueJS 3, ExpressJS 4.17 | Upload et redimensionnement d'une image

Javascript Framework JS

Crée le : samedi 28 novembre 2020

Symfony Event Subscriber | Restriction d'une plage ip avec un Event Subscriber

Symfony

Crée le : samedi 14 novembre 2020

Angular, ExpressJS | Authentification JWT avec Angular 10 et ExpressJS 4 (MySQL)

Javascript SQL Framework JS

Crée le : dimanche 20 septembre 2020

Symfony, Excel, CSV | Générer un fichier CSV pour Excel avec Symfony

Symfony

Crée le : jeudi 6 août 2020

Symfony FormType ChoiceType | Radio button valeur par défaut dans un FormType

Symfony

Crée le : dimanche 26 juillet 2020

Doctrine, Symfony | Différence entre deux dates sous MySQL (Jour, mois, années...)

Symfony SQL

Crée le : jeudi 18 juin 2020

JavaScript, jQuery et Regex | Sécuriser un mot de passe en temps réel avec JS

Javascript jQuery

Crée le : lundi 23 mars 2020

Symfony, Doctrine | Récupérer les anciennes données d'un formulaire FormType

Symfony

Crée le : vendredi 14 février 2020

jQuery, Webpack et Symfony | Appeler jQuery dans vos fichiers twig

Symfony Bugs

Crée le : dimanche 26 janvier 2020