124 votes

Comment puis-je vérifier si la date/heure actuelle est postérieure à une date/heure donnée ?

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 ?

241voto

Salman A Points 60620

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 .

6 votes

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).

1 votes

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...

0 votes

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

78voto

VolkerK Points 54118

Il y a aussi le DateTime qui implémente une fonction pour les opérateurs de comparaison.

// $now = new DateTime();
$dtA = new DateTime('05/14/2010 3:00PM');
$dtB = new DateTime('05/14/2010 4:00PM');

if ( $dtA > $dtB ) {
  echo 'dtA > dtB';
}
else {
  echo 'dtA <= dtB';
}

1 votes

Quelle fonction met-elle en œuvre pour cela ?

7voto

Ivar Koster Points 29

La plage de l'objet dateTime s'étend d'environ 292 milliards d'années dans le passé à la même période dans le futur. La fonction timestamp a une limite (de 1970 à 2038 si je me souviens bien).

6voto

Select0r Points 5828

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é.

0 votes

Voir la réponse d'Ivar Koster

1voto

date_default_timezone_set('Asia/Kolkata');

$curDateTime = date("Y-m-d H:i:s");
$myDate = date("Y-m-d H:i:s", strtotime("2018-06-26 16:15:33"));
if($myDate < $curDateTime){
    echo "active";exit;
}else{
    echo "inactive";exit;
}

0 votes

Cela ne fonctionnera sûrement pas comme $myDate sera égal à string (0) "" .

Prograide.com

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.

Powered by:

X