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:
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.
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 :).
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:~#
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
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)
Si vous voulez comparer les dates et non le temps, vous pouvez utiliser ceci:
$d1->format("Y-m-d") == $d2->format("Y-m-d")
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`
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";
}
$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';
}