PHP Zeit Differenz in PHP

Zeitter1

Well-known member
ID: 84902
L
25 April 2006
183
3
Hallo,
ich bin schon ca 3 Stunden daran mir die Differenz in Tagen ausgeben zu lassen.
Irgendwie klappt das ganze aber nicht.

PHP:
$dateablauf = new DateTime($_SESSION["date"]);
$dateablauf->add(new DateInterval('P120D'));

$datetime1 = date_create(date("y.m.d", strtotime($_SESSION["date"])));
$datetime2 = date_create($dateablauf->format('y.m.d'));
$interval = date_diff($datetime1, $datetime2);

echo date("d.m.y", strtotime($_SESSION["date"]));
echo date("d.m.y", strtotime($dateablauf));
echo $interval->format('%R%a days');

Ausgaben:
echo date("d.m.y", strtotime($_SESSION["date"])); = 05.12.14
echo date("d.m.y", strtotime($dateablauf)); = 01.01.70 (soll aber 04.04.15 sein)
echo $interval->format('%R%a days'); = +0 days

Danke im Voraus für Lösungvorschläge
 
Erster Tipp: Fehlerberichterstattung einschalten. Dann verrät dir PHP selbst schon ganz viel...
Zweiter Tipp: Entscheide dich, ob du objektorientierte oder prozedurale Schreibweisen verwenden willst, und bleib dann auch dabei.
Dritter Tipp: Überlege dir zuerst, was du überhaupt tun willst, und dann, wie man da hin kommt.

Entscheidend dafür, dass es nicht klappt, ist aber dies hier:

PHP:
$datetime1 = date_create(date("y.m.d", strtotime($_SESSION["date"])));
Was soll das denn sein? Du wandelst ein Datum, das dir in einer Session-Variable als String vorliegt, in einen Timestamp, um anschließend ein formatiertes Datum in einem String zu bekommen, das du dann wiederum in eine DateTime-Objekt konvertierst?
Das klingt nicht wirklich sinnvoll, zumal du aus der Session-Variable weiter oben ja schon mal ein DateTime-Objekt gebaut hast, da aber auf einem anderen Weg...

Wirft man dann noch einen Blick auf die PHP-Datumsformate, stellt man fest, dass dein "y.m.d" gleich doppelt falsch ist:
Erstens ist y.m.d kein zulässiges Format für die Übergabe an date_create (respektive DateTime::__construct), sondern höchstens d.m.y, zweitens würde aber auch das in diesem Fall schief gehen, wie man dem Hinweis weiter unten auf der Seite entnehmen kann
The "Day, month and two digit year, with dots or tabs" format (dd [.\t] mm "." yy) only works for the year values 61 (inclusive) to 99 (inclusive) - outside those years the time format "HH [.:] MM [.:] SS" has precedence.

Wenn du das "y.m.d" in den beiden date_create-Aufrufen also durch das zulässige "y-m-d" ersetzt, funktioniert dein Schnipsel. (Was aber nichts daran ändert, dass der Weg über strtotime(), date() und date_create() nicht wirklich sinnvoll ist.)