Wenn Sie sich die PHP-Dokumentation ansehen, DateTime
scheinen die folgenden zwei Methoden des Objekts mein Problem zu lösen:
- DateTime :: diff : Ermitteln Sie den Unterschied und verwenden Sie diesen, um festzustellen, welcher älter ist.
- DateTime :: getTimestamp : Ruft den UNIX-Zeitstempel ab und vergleicht diese.
Beide Methoden sind im Dokument als in Version> = 5.3 verfügbar markiert (und es überrascht nicht, dass sie nicht vorhanden sind, wenn ich versuche, sie aufzurufen). Ich kann keine spezifische Dokumentation für 5.2.8 finden, daher bin ich mir nicht sicher, ob meine Version gleichwertige Methoden enthält. Ich habe das Problem gegoogelt und eine vielseitige Auswahl an Lösungen gefunden, von denen keine meine sehr einfachen Anforderungen erfüllt:
- Wie vergleiche ich zwei DateTime-Objekte?
- Wo finde ich das Dokument für frühere PHP-Versionen? Speziell Version 5.2.8?
Für einige Zusammenhänge habe ich den folgenden Code:
$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)
Anscheinend gibt es keinen Vergleichsoperator für diesen Kerl.
Bearbeiten
Anscheinend waren meine Annahmen völlig falsch (danke Milen, dass er dies so effektiv illustriert hat). Es gibt einen Vergleichsoperator und es funktioniert gut, danke. Manchmal vermisse ich wirklich einen Compiler. Der Fehler befindet sich im obigen Code. Ich bin sicher, Sie werden ihn viel schneller finden als ich :).
$_POST
Kätzchen getötet.Antworten:
Folgendes scheint zu bestätigen, dass es Vergleichsoperatoren für die DateTime-Klasse gibt:
quelle
DateTime
s mit demselben Datum nicht als gleich verglichen werden, wenn Sie glauben, dass sie sollten. Sie können dies beheben, indem Sie die Zeitkomponenten des Objekts vor dem Vergleich explizit auf Null setzen.Aus der offiziellen Dokumentation :
Für PHP-Versionen vor 5.2.2 (eigentlich für jede Version) können Sie diff verwenden .
quelle
Sie können auch Sekunden der Epoche vergleichen:
Quelle: http://laughingmeme.org/2007/02/27/looking-at-php5s-datetime-and-datetimezone/ (ziemlich interessanter Artikel über DateTime)
quelle
format
eine Zeichenfolge erstellt wird. Dies ist also ein Zeichenfolgenvergleich. Nach 1000000000 Epochen (ungefähr am 9. September 2001) ist dies kaum ein Problem. Wenn Sie sich jedoch mit Daten vor diesem Datum befassen müssen , können aufgrund unterschiedlicher Nummernlängen Probleme auftreten. Konvertieren Sie die Ergebnisse entweder in Zahlen (das Subtrahieren funktioniert auch) oder verwenden Sie ein wirklich sortierbares Format wiec
.Wenn Sie Datum und nicht Uhrzeit vergleichen möchten, können Sie Folgendes verwenden:
quelle
$d1->setTime(0, 0, 0);
Ab PHP 7.x können Sie Folgendes verwenden:
quelle
quelle
Dies kann Ihnen helfen.
quelle
$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";}
Prost.