web-dev-qa-db-fra.com

Comment comparer deux objets DateTime dans PHP 5.2.8?

En regardant dans la documentation PHP, les deux méthodes suivantes de l'objet DateTime sembleraient toutes les deux résoudre mon problème:

Ces deux méthodes sont marquées dans doco comme étant disponibles dans la version> = 5.3 (et, sans surprise, si j'essaie de les appeler, je trouve qu'elles n'existent pas). Je ne trouve pas de documentation spécifique pour 5.2.8, donc je ne suis pas sûr s'il existe des méthodes équivalentes dans ma version. J'ai googlé le problème et trouvé une gamme éclectique de solutions, dont aucune ne répond à mes exigences très simples:

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

Pour certains 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 type.

Modifier

Apparemment mes hypothèses étaient complètement fausses (merci Milen de l'illustrer de manière aussi efficace). Il y a un opérateur de comparaison et cela fonctionne très bien merci. Parfois, un compilateur me manque vraiment. Le bogue est dans le code ci-dessus, je suis sûr que vous le trouverez beaucoup plus rapidement que moi :).

278
RedBlueThing

Ce qui suit semble confirmer l’existence d’opérateurs de comparaison pour la classe DateTime:

dev:~# php
<?php
date_default_timezone_set('Europe/London');

$d1 = new DateTime('2008-08-03 14:52:10');
$d2 = new DateTime('2008-01-03 11:11:10');
var_dump($d1 == $d2);
var_dump($d1 > $d2);
var_dump($d1 < $d2);
?>
bool(false)
bool(true)
bool(false)
dev:~# php -v
PHP 5.2.6-1+lenny3 with Suhosin-Patch 0.9.6.2 (cli) (built: Apr 26 2009 20:09:03)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
dev:~#
411
Milen A. Radev

De la documentation officielle :

A partir de PHP 5.2.2, les objets DateTime peuvent être comparés à l'aide de opérateurs de comparaison .

$date1 = new DateTime("now");
$date2 = new DateTime("tomorrow");

var_dump($date1 == $date2); // false
var_dump($date1 < $date2); // true
var_dump($date1 > $date2); // false

Pour PHP versions antérieures à la 5.2.2 (en fait, quelle que soit la version), vous pouvez utiliser diff .

$datetime1 = new DateTime('2009-10-11'); // 11 October 2013
$datetime2 = new DateTime('2009-10-13'); // 13 October 2013

$interval = $datetime1->diff($datetime2);
echo $interval->format('%R%a days'); // +2 days
41
Roberto Alonso

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

$d1->format('U') < $d2->format('U')

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

30
Julien

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

$d1->format("Y-m-d") == $d2->format("Y-m-d")
20
blablabla

A partir de PHP 7.x, vous pouvez utiliser les éléments suivants:

$aDate = new \DateTime('@'.(time()));
$bDate = new \DateTime('@'.(time() - 3600));

$aDate <=> $bDate; // => 1, `$aDate` is newer than `$bDate`
1
jens1o

Cela peut vous aider.

$today = date("m-d-Y H:i:s");
$thisMonth =date("m");
$thisYear = date("y");
$expectedDate = ($thisMonth+1)."-08-$thisYear 23:58:00";


if (strtotime($expectedDate) > strtotime($today)) {
    echo "Expected date is greater then current date";
    return ;
} else
{
 echo "Expected date is lesser then current date";
}
0
Tarun Gupta
$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';
}
0
Kyle Coots