Comparer deux dates et avoir les alertes
Fermé
glo
-
10 juin 2016 à 16:30
spylller Messages postés 395 Date d'inscription dimanche 1 mars 2015 Statut Membre Dernière intervention 11 juillet 2019 - 11 juin 2016 à 14:14
spylller Messages postés 395 Date d'inscription dimanche 1 mars 2015 Statut Membre Dernière intervention 11 juillet 2019 - 11 juin 2016 à 14:14
A voir également:
- Comparer deux date php
- Deux comptes whatsapp - Guide
- Deux ecran pc - Guide
- Cette photo n’a pas été prise cette année. trouvez la date, l'heure et avec quel modèle d'appareil photo elle a été prise. - Forum Graphisme
- Publipostage date inversée ✓ - Forum Word
- Publipostage date en anglais ✓ - Forum Excel
1 réponse
spylller
Messages postés
395
Date d'inscription
dimanche 1 mars 2015
Statut
Membre
Dernière intervention
11 juillet 2019
28
11 juin 2016 à 14:14
11 juin 2016 à 14:14
Salut,
Petit copier coller d'openclassrooms, cours sur les dates en php que tu peux retrouver ici :
https://openclassrooms.com/courses/gerer-les-dates-en-php
La partie qui te sera utile :
Comparaison de deux dates
Plus récent, plus ancien
Voici un autre avantage de passer des timestamp à DateTime, la manière de comparer les dates ! Imaginez vous que vous ne connaissiez que la version "chaîne de caractères" de la date, par exemple "14/02/2012". Si vous voulez la comparer, sans utiliser les DateTime vous seriez obligé de passer par la fonction strtotime deux fois, de comparer les timestamp puis enfin d'afficher le résultat. Vous avouerez que c'est lourd. Surtout que maintenant vous savez que les timestamps ne sont valides que sur la période allant du 01/01/1970 au 19/01/2038 ;)
Alors qu'avec DateTime on compare deux dates de la même manière qu'un entier, à une toute petite exception près. Imaginons que nous voulions vérifier que le "14/02/2012" est bien antérieur au "12/03/2013".
<?php
// avec strtotime :-(
$date1= strtotime("14/02/2012");
$date2= strtotime("12/03/2013");
if( $date1 < $date2 ){
echo date('d/m/Y',$date1);
}
// avec DateTime :-)
$date1 = new DateTime("14/02/2012");
$date2 = new DateTime("12/03/2013");
if( $date1 < $date2 ){
echo $date2->format('d/m/Y');
}
Les deux codes qui ont été donnés sont équivalents sauf que cette fois-ci vous comparez directement les dates, c'est plus intuitif et donc plus lisible.
Ne comparez JAMAIS les chaînes de caractères ! Dans notre cas (je ne l'ai pas choisi au hasard) il en résulterait que le 14/02/2012 se passe APRES le 12/03/2013. En effet 14 vient bien après 12...
Le cas particulier : vérifier que deux dates sont égales
Quoi ? c'est un cas particulier ? je pourrais pas écrire $date1 == $date2 ?
En fait, si, mais attention. Vous ne pourrez l'écrire que si vous êtes sûr(e) que vous êtes en présence de deux DateTime. Si ce n'est pas le cas il faut recourir à une astuce.
En effet PHP est un langage faiblement typé. Ça veut dire qu'on ne connait pas le type d'une variable auquel on a à faire tant que la variable n'a pas été testée. Cela signifie aussi que PHP, pour vérifier si deux contenus sont égaux, va vouloir tout convertir dans un type plus "général".Du coup, j'ai fait le test pour vous, <?php var_dump(new DateTime()==new ArrayObject);//renvoie true!!!
Heureusement, comme je vous l'ai dit, il y a une astuce, qui porte le nom de "triple égal".
Re-testons le code précédent en remplaçant "==" par "===" <?php var_dump(new DateTime()===new ArrayObject);//renvoie false!!!.
Ouf... En fait le "===" vérifie avant tout qu'on a le même type de données de chaque côté.Donc voila ce qu'il faut retenir : pour vérifier que deux dates sont égales, on utilise "===" au lieu de "==".
Une autre solution si le triple égal vous fait peur serait d'utiliser une vérification du type avec instanceof ou avec le typehint.
Petit copier coller d'openclassrooms, cours sur les dates en php que tu peux retrouver ici :
https://openclassrooms.com/courses/gerer-les-dates-en-php
La partie qui te sera utile :
Comparaison de deux dates
Plus récent, plus ancien
Voici un autre avantage de passer des timestamp à DateTime, la manière de comparer les dates ! Imaginez vous que vous ne connaissiez que la version "chaîne de caractères" de la date, par exemple "14/02/2012". Si vous voulez la comparer, sans utiliser les DateTime vous seriez obligé de passer par la fonction strtotime deux fois, de comparer les timestamp puis enfin d'afficher le résultat. Vous avouerez que c'est lourd. Surtout que maintenant vous savez que les timestamps ne sont valides que sur la période allant du 01/01/1970 au 19/01/2038 ;)
Alors qu'avec DateTime on compare deux dates de la même manière qu'un entier, à une toute petite exception près. Imaginons que nous voulions vérifier que le "14/02/2012" est bien antérieur au "12/03/2013".
<?php
// avec strtotime :-(
$date1= strtotime("14/02/2012");
$date2= strtotime("12/03/2013");
if( $date1 < $date2 ){
echo date('d/m/Y',$date1);
}
// avec DateTime :-)
$date1 = new DateTime("14/02/2012");
$date2 = new DateTime("12/03/2013");
if( $date1 < $date2 ){
echo $date2->format('d/m/Y');
}
Les deux codes qui ont été donnés sont équivalents sauf que cette fois-ci vous comparez directement les dates, c'est plus intuitif et donc plus lisible.
Ne comparez JAMAIS les chaînes de caractères ! Dans notre cas (je ne l'ai pas choisi au hasard) il en résulterait que le 14/02/2012 se passe APRES le 12/03/2013. En effet 14 vient bien après 12...
Le cas particulier : vérifier que deux dates sont égales
Quoi ? c'est un cas particulier ? je pourrais pas écrire $date1 == $date2 ?
En fait, si, mais attention. Vous ne pourrez l'écrire que si vous êtes sûr(e) que vous êtes en présence de deux DateTime. Si ce n'est pas le cas il faut recourir à une astuce.
En effet PHP est un langage faiblement typé. Ça veut dire qu'on ne connait pas le type d'une variable auquel on a à faire tant que la variable n'a pas été testée. Cela signifie aussi que PHP, pour vérifier si deux contenus sont égaux, va vouloir tout convertir dans un type plus "général".Du coup, j'ai fait le test pour vous, <?php var_dump(new DateTime()==new ArrayObject);//renvoie true!!!
Heureusement, comme je vous l'ai dit, il y a une astuce, qui porte le nom de "triple égal".
Re-testons le code précédent en remplaçant "==" par "===" <?php var_dump(new DateTime()===new ArrayObject);//renvoie false!!!.
Ouf... En fait le "===" vérifie avant tout qu'on a le même type de données de chaque côté.Donc voila ce qu'il faut retenir : pour vérifier que deux dates sont égales, on utilise "===" au lieu de "==".
Une autre solution si le triple égal vous fait peur serait d'utiliser une vérification du type avec instanceof ou avec le typehint.