Comment puis-je vérifier si la date / heure actuelle dépasse une date / heure définie?

115

J'essaie d'écrire un script qui vérifiera si la date / heure actuelle est passée 05/15/2010 at 4PM

Comment puis-je utiliser la fonction date () de PHP pour effectuer cette vérification?

Dave
la source

Réponses:

228

Depuis PHP> = 5.2.2, vous pouvez utiliser la DateTimeclasse en tant que telle:

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 transmise au constructeur DateTime est analysée selon ces règles .


Notez qu'il est également possible d'utiliser timeet des strtotimefonctions. Voir la réponse originale .

Salman A
la source
6
horodatage a quelques limitations, et quelques bugs aussi, par exemple un horodatage ne peut pas gérer une date avant 1970 et après 2038 (voir la réponse d'Ivar Koster)
Steel Brain
1
Nous voyons souvent un abus de nouveau DateTime () sans paramètre, si vous utilisez des dates UTC (comme vous devriez), préférez utiliser un nouveau DateTime ("maintenant", nouveau DateTimeZone ('UTC')). Cela évitera à votre application des bogues incompréhensibles dans les dates. je vous conseille de le stocker dans une fonction variable statique, une classe statique ou ailleurs dans votre processus en cours d'exécution ...
Loenix
Que faire si nous avons déjà un objet DateTime et que nous voulons savoir si cela est passé car nous ne pouvons pas passer un objet au constructeur DateTime comme vous l'avez suggéré? devrions-nous utiliser son getTimestamp () et le comparer avec time ()? @Salman A
user4271704
@ user4271704 Le new DateTime('2010-05-15')n'est qu'un exemple, il peut s'agir de n'importe quel objet DateTime que vous avez initialisé précédemment.
Salman A
en supposant que $objectc'est un objet DateTime, je l'ai utilisé if (new DateTime() > $object) {}et cela fonctionne mal. Mais if (time() > $bject->getTimeStamp()) {}fonctionne correctement. @Salman A
user4271704
77

Il existe également la classe 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';
}
VolkerK
la source
1
Quelle fonction met-il en œuvre pour cela?
still_dreaming_1
6

Vérifiez la fonction de PHP strtotimepour convertir votre date / heure définie en un horodatage: http://php.net/manual/en/function.strtotime.php

Si strtotimevous ne pouvez pas gérer correctement votre format de date / heure ("16h00" fonctionnera probablement mais pas "à 16h00"), vous devrez utiliser des fonctions de chaîne, par exemple substrpour analyser / corriger votre format et récupérer votre horodatage via une autre fonction, par exemple mktime.

Ensuite, comparez l'horodatage résultant avec la date / heure actuelle ( if ($calulated_timestamp > time()) { /* date in the future */ }) pour voir si la date / heure définie est dans le passé ou dans le futur.

Je suggère de lire le PHP-doc sur les fonctions date / heure et de revenir ici avec une partie de votre code source une fois que vous êtes bloqué.

Select0r
la source
voir la réponse d'Ivar Koster
Steel Brain
1
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;
}
Rakesh Kumar Pradhan
la source
Cela ne fonctionnera sûrement pas comme $myDatecela sera égal à string (0) "".
Nikola Petkanski