PHP PHP Datetime Diff Frage

Falc410

Vice Admiral
Registriert
Juni 2006
Beiträge
6.420
Ich bin kein PHP Entwickler aber muss mich gerade damit rumschlagen.
Ich habe zwei DateTime Objekte und ich möchte wissen ob diese mehr als eine Stunde auseinander liegen.
PHP:
$datetimeObjekt1->diff($datetimeObjekt2)->format('%h') > 1

Beispiel:
2021-11-07T17:49:58+0100

2021-10-29T18:43:00+0200

Unterschied sind dann 0 Stunden obwohl sich die Teile um mehrere Tage unterscheiden. Wenn ich format('%d') mache kommt als Wert 9 raus z.B.

Ich hatte vorher die DateTime Objekte in Epoch Time umgerechnet und dann die Int Werte voneinander abgezogen aber mein Kollege hat gesagt, das wäre ein schlechter Stil, ich soll DateTime und Diff benutzen. Aber ich brauche das Diff, von mir aus in Sekunden, aber halt den Betrag und zwar vom kompletten Date und nicht nur der einzelnen Positionen (wie Jahr, Monat, Tag, Stunden, Minuten, Sekunden)...

Jemand eine Idee?

Edit: Endlich einen passenden StackOverflow gefunden (hatte ja schon gesucht bevor ich hier gepostet habe):
https://stackoverflow.com/questions/365191/how-to-get-time-difference-in-minutes-in-php

Da ist die Lösung. Ich hatt es vorher mit strtotime implementiert, was aber wohl nicht mehr genutzt werden sollte. Aber hier war die Lösung ->getTimeStamp()
Hoffe das passt. Nun kann ich
PHP:
abs($dateTimeObjekt1->getTimeStamp()-$dateTimeObjekt2->getTimeStamp()) > 3600 machen
 
Zuletzt bearbeitet:
Ahja, zu spät gesehn. Zeitvergleiche immer mit Unix-Timestamps machen ;-) das sind einfache Zahlen.

abs sollte nicht nötig sein strtotime geht auch alternativ und es gibt auch "neu" $difference_object = $dateTimeObjekt1.diff($dateTimeObjekt2)

jedenfalls eine nette übersicht im SO thread.
 
Zuletzt bearbeitet:
Das hatte ich eben auch gedacht, aber mein Kollege meinte das wäre nicht gut, da es dann irgendwann (2040?) einen Überlauf geben wird mit der Epoch Time. Ich fand das Argument auch etwas schwach aber ok.
Das Difference Objekt ist ja genau das was ich habe, nur ist das halt wieder ein DateTime Objekt welches dann mit format('%h') aber nur auf die Stunden geschaut hat. Man müsste wie bei SO beschrieben dann alle Werte durchgehen und in Sekunden umrechnen und aufsummieren. Sehr umständlich. getTimeStamp() scheint ja nicht viel anders zu sein als strtotime aber vielleicht "sicherer" da das andere wohl den Timestamp als String interpretiert und dann umrechnet.
 
gut das mit 2040 hab ich noch nicht gehört, soll sein ;-)

ungenauigkeit bei diff ist dann schon eher blöd. Sicherer ist getTimeStamp dann wenn du die Daten irgendwo abrufst. aber dann prüfst du auch ob das objekt erstellt wurde. irgendwo müssen benutzer eingaben ja immer mal geprüft werden.
 
Falc410 schrieb:
Das hatte ich eben auch gedacht, aber mein Kollege meinte das wäre nicht gut, da es dann irgendwann (2040?) einen Überlauf geben wird mit der Epoch Time.
Das stimmt soweit es ein 32 Bit Typ ist aber bis dahin sollte es auf 64 Bit umgestellt sein.
 
  • Gefällt mir
Reaktionen: Kontrollfreak

Ähnliche Themen

Zurück
Oben