Wie vergleicht PHP DateTime
Objekte, wenn bedingte Operatoren verwendet werden ( <
, >
, >=
, <=
)?
Ist diese Vergleich Zeitzone invariant?
Ich habe versucht, unter Code und es sieht aus wie es Zeitzone unveränderlich ist, kann jemand bestätigen?
Code:
%Vor%Ausgabe:
%Vor%Laut dem Handbuch :
Ab PHP 5.2.2 können DateTime-Objekte mit Vergleichsoperatoren verglichen werden.
Sie haben ein sehr verwirrendes Beispiel gewählt, das ein festes Datum enthält, das nicht klar ist, wenn es in der Vergangenheit liegt und eine Zeitzone, die gerade nicht aktiv ist (bis Ende Oktober ist es hier in Westeuropa). Was auch immer, ich sehe nichts falsch in Ihrer Ausgabe: 2015-10-09 10:53:42 CET
(was gleich 2015-10-09 09:53:42 UTC
ist) ist deutlich größer als 2015-10-09 10:28:01 Europe/Paris
(was gleich 2015-10-09 08:28:01 UTC
ist).
Mit einem etwas besseren Beispiel können wir erraten, dass die Operanden wie erwartet funktionieren:
%Vor% %Vor%Ein anderes Beispiel:
%Vor%Das Problem mit dem obigen Code ist die Verwendung eines anderen Zeitzonentyps.
PHP hat drei Arten von Zeitzonen:
Ein UTC-Offset, z. B. in new DateTime ("2015-02-29 -0500");
Eine Zeitzonenabkürzung, z. B. in new DateTime ("2015-02-29 EST");
Ein Zeitzonen-Identifikator, wie in new DateTime ("2015-02-29 America / Montreal");
Wenn Sie zwei Datetime-Objekte mit unterschiedlichen Zeitzonentypen vergleichen, erhalten Sie kein entsprechendes Ergebnis.
In Ihrem Fall sind die Zeitzonen Typ 2 und Typ 3. Verwenden Sie die gleichen Zeitzonentypen, und Sie erhalten das richtige Ergebnis.