En jetant un œil à la documentation PHP, les deux méthodes suivantes de l' DateTime
objet semblent toutes les deux résoudre mon problème:
- DateTime :: diff : Obtenez la différence et utilisez-la pour déterminer laquelle est la plus ancienne.
- DateTime :: getTimestamp : Obtenez le timestampt UNIX et comparez-les.
Ces deux méthodes sont marquées dans le doco comme étant disponibles dans la version> = 5.3 (et, sans surprise, si j'essaye de les appeler je trouve qu'elles n'existent pas). Je ne trouve aucune documentation spécifique pour 5.2.8, donc je ne suis pas sûr qu'il existe des méthodes équivalentes dans ma version. J'ai recherché le problème sur Google 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 doco pour les versions PHP précédentes? Plus précisément la version 5.2.8?
Pour un certain 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.
Éditer
Apparemment, mes hypothèses étaient complètement fausses (merci Milen d'avoir illustré cela si efficacement). Il y a un opérateur de comparaison et cela fonctionne très bien merci. Parfois, je manque vraiment un compilateur. Le bug est dans le code ci-dessus, je suis sûr que vous le trouverez beaucoup plus rapidement que moi :).
$_POST
vars, sinon le chaton sera tué.Réponses:
Ce qui suit semble confirmer qu'il existe des opérateurs de comparaison pour la classe DateTime:
la source
DateTime
s avec la même date ne seront pas comparés comme égaux quand vous pensez qu'ils devraient. Vous pouvez y remédier en définissant explicitement les composants temporels de l'objet sur zéro avant de les comparer.De la documentation officielle :
Pour les versions PHP antérieures à 5.2.2 (en fait pour n'importe quelle version), vous pouvez utiliser diff .
la source
Vous pouvez également comparer les secondes d'époque:
Source: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (article assez intéressant sur DateTime)
la source
format
produit une chaîne , c'est donc une comparaison de chaînes. C'est à peine un problème après 1000000000 d'époque (environ le 9 septembre 2001), mais si vous devez faire face à des dates antérieures , vous risquez de rencontrer des problèmes en raison de différentes longueurs de numéros. Soit convertir les résultats en nombres (les soustraire fonctionne aussi), soit utiliser un format vraiment triable commec
.Si vous souhaitez comparer des dates et non des heures, vous pouvez utiliser ceci:
la source
$d1->setTime(0, 0, 0);
Depuis PHP 7.x, vous pouvez utiliser les éléments suivants:
la source
la source
Cela peut vous aider.
la source
$today = new DateTime("now");
$time = DateTime::createFromFormat('d-m-Y',"26-October-1998");
if ($today > $time){echo "today is greater";}else{echo "other time is greater";}
bravo.