J'essaie d'écrire un script qui vérifiera si la date/heure actuelle est passée par la date et l'heure du jour. 05/15/2010 at 4PM
Comment puis-je utiliser la fonction date() de PHP pour effectuer cette vérification ?
J'essaie d'écrire un script qui vérifiera si la date/heure actuelle est passée par la date et l'heure du jour. 05/15/2010 at 4PM
Comment puis-je utiliser la fonction date() de PHP pour effectuer cette vérification ?
Depuis PHP >= 5.2.2, vous pouvez utiliser la fonction DateTime
comme tel :
if (new DateTime() > new DateTime("2010-05-15 16:00:00")) {
# current time is greater than 2010-05-15 16:00:00
# in other words, 2010-05-15 16:00:00 has passed
}
La chaîne de caractères passée à la fonction Constructeur DateTime est analysé selon ces règles .
Notez qu'il est également possible d'utiliser time
et strtotime
fonctions. Voir la réponse originale .
Timestamp a quelques limitations, et quelques bugs aussi, par exemple un timestamp ne peut pas gérer une date avant 1970 et après 2038 (voir la réponse d'Ivar Koster).
On voit souvent un abus de new DateTime() sans paramètre, si vous utilisez des dates UTC (comme il se doit), préférez utiliser new DateTime("now", new DateTimeZone('UTC')). Cela évitera à votre application des bugs de dates incompréhensibles. Je vous conseille de la stocker dans une variable statique de fonction, de classe ou autre dans votre processus d'exécution...
Que faire si nous avons déjà un objet DateTime et que nous voulons savoir s'il est passé car nous ne pouvons pas passer un objet au constructeur de DateTime comme vous l'avez suggéré ? Devrions-nous utiliser son getTimestamp() et le comparer avec time() ? @Salman A
Vérifiez l'environnement PHP strtotime
-Cette fonction permet de convertir la date et l'heure que vous avez définies en un horodatage : http://php.net/manual/en/function.strtotime.php
Si strtotime
ne peut pas gérer correctement votre format de date/heure ("4:00PM" fonctionnera probablement, mais pas "at 4PM"), vous devrez utiliser des fonctions de chaîne, par exemple substr
pour analyser/corriger votre format et récupérer votre horodatage via une autre fonction, par exemple mktime
.
Comparez ensuite l'horodatage résultant avec la date et l'heure actuelles ( if ($calulated_timestamp > time()) { /* date in the future */ }
) pour savoir si la date/heure définie se situe dans le passé ou dans le futur.
Je vous suggère de lire la doc PHP sur les fonctions date/heure et de revenir ici avec une partie de votre code source lorsque vous serez bloqué.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.