PHP: Vergleichen zweier DateTime-Objekte mit unterschiedlichen Zeitzonen

8

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%     
Yogesh 09.10.2015, 10:09
quelle

2 Antworten

10

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%

Demo mit vollem Code .

Ein anderes Beispiel:

%Vor%     
Álvaro González 09.10.2015, 11:25
quelle
-2

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.

    
Anurag Verma 09.10.2015 10:35
quelle

Tags und Links