2010-05-14 6 views

Répondre

5

strtotime de Check PHP -fonction pour convertir votre date fixe/heure à un horodatage: http://php.net/manual/en/function.strtotime.php

Si strtotime ne peut pas gérer votre date/format de l'heure correctement (« 16:00 » ne fonctionnera probablement mais pas « à 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 ex. mktime.

Ensuite, comparez l'horodatage qui en résulte avec la date/heure actuelle (if ($calulated_timestamp > time()) { /* date in the future */ }) pour voir si la date et l'heure sont passées ou futures.

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

+0

voir l'horodatage réponse –

176

Depuis PHP> = 5.2.0 vous pouvez utiliser la classe DateTime en tant que tel:

if (new DateTime() > new DateTime("2010-05-15 16:00:00")) { 
    # current time is greater than 2010-05-15 16:00:00 and thus in the past 
} 

La chaîne passée à la DateTime constructor est analysée according to these rules.


Notez qu'il est également possible d'utiliser time et strtotime fonctions. See original answer.

+4

Ivar Koster a des limites compagnon, 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) –

+0

réponse génial! :) –

+0

Nous voyons souvent un abus de nouveau DateTime() sans paramètre, si vous utilisez des dates UTC (comme vous le devriez), préférez utiliser de nouvelles DateTime ("maintenant", nouvelle DateTimeZone ('UTC')). Cela permettra d'éviter que votre application ne comprenne des bugs dans les dates. Je vous conseille de le stocker dans une variable statique de fonction, une classe statique ou ailleurs dans votre processus en cours ... – Loenix

75

Il y a aussi 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'; 
} 
+0

Qu'est-ce que la fonction met-elle en œuvre pour cela? –

6

La plage d'objets dateTime est passée d'environ 292 milliards d'années à la même dans le futur. La fonction d'horodatage a une limite (commence de 1970 à 2038 si je me souviens bien).

1

J'ai eu un problème avec cette date de comparaison et besoin d'ajuster

function getDatetimeNow() { 
    $tz_object = new DateTimeZone('Europe/Belgrade'); 
    $datetime = new DateTime(); 
    $datetime->setTimezone($tz_object); 
    return $datetime->format('Y\-m\-d\ h:i:s'); 
} 

$currentDate = getDatetimeNow(); 

$dtA = new DateTime($currentDate); 
$dtB = new DateTime($date); 

if ($dtA > $dtB) { 
    $active = 0; 
    return $active; 
} 
else { 
    $active = 1; 
    return $active; 
} 
Questions connexes