332 votes

Comment comparer deux objets DateTime en PHP 5.2.8 ?

Cela semble être quelque chose qui devrait être assez simple, mais j'ai été coincé page défaillant ce problème pour un certain temps maintenant, donc voilà.

Avoir un coup d'oeil sur la documentation de PHP , l'une des deux méthodes suivantes de l'objet DateTime permettrait à la fois de résoudre mon problème:

Ces deux méthodes sont marqués dans le doco comme étant disponible en version >= 5.3 (et, il n'est pas surprenant, si j'essaie de les appeler, je trouve qu'ils n'existent pas). Je ne trouve pas de documentation spécifique pour 5.2.8 donc je ne sais pas si il y a des méthodes équivalentes dans ma version. J'ai Googlé le problème et trouvé une gamme éclectique de solutions, mais aucune de répondre à mes exigences simples:

  • Comment comparer deux objets DateTime?
  • Où puis-je trouver les doco pour les précédentes versions de PHP? Plus précisément version 5.2.8?

Pour le contexte, j'ai le code suivant:

$st_dt = new DateTime(verifyParam ('start_date'));
$end_dt = new DateTime(verifyParam ('end_date'));

// is the end date more ancient than the start date?
if ($end_dt < $start_dt) 

Apparemment, il n'y a pas d'opérateur de comparaison sur ce gars.

EDIT: Apparemment mes hypothèses étaient complètement faux (merci Milen pour illustrer ce de manière efficace). Il est un opérateur de comparaison et il fonctionne très bien, merci. Parfois, je manque vraiment d'un compilateur. Le bug est dans le code ci-dessus, je suis sûr que vous trouverez qu'il est beaucoup plus rapide que j'ai fait :).

J'ai hâte à mon embarras à la simplicité de votre solution.

EDIT: Et bien sûr, de la gêne qui s'ensuit ...

480voto

Milen A. Radev Points 20462

Ce qui suit semble confirmer qu’il y a des opérateurs de comparaison pour la classe DateTime :

33voto

Julien Points 3525

Vous pouvez également comparer les secondes de l’époque :

Source : http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (très intéressant article sur DateTime)

23voto

blablabla Points 33

Si vous voulez comparer les dates et pas le temps, vous pouvez utiliser ceci :

1voto

user96534678 Points 446
$elapsed = '2592000';
// Time in the past
$time_past = '2014-07-16 11:35:33';
$time_past = strtotime($time_past);

// Add a month to that time
$time_past = $time_past + $elapsed;

// Time NOW
$time_now = time();

// Check if its been a month since time past
if($time_past > $time_now){
    echo 'Hasnt been a month';    
}else{
    echo 'Been longer than a month';
}

-2voto

Tarun Gupta Points 1369

Cela peut vous aider.

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