date_fromat und ->date() erzeugen Fehlermeldung. Datums-String falsch?

suntrop

Erfahrenes Mitglied
Hallo

Ich will ein Datum formatieren, erhalte aber die Fehlermeldung, dass ein DateTime string benötigt wird.
Code:
date_format() expects parameter 1 to be DateTime, string given
PHP:
date_format($row->end_time, 'Y')
Das Datenbankfeld ist vom Typ DateTime.

Wenn ich mit print_r() das Array (mit zwei Objekten) ausgebe, dann steht dort …
Code:
Array
(
    [0] => stdClass Object
        (
            [id] => 1
            …
            [start_time] => 2011-07-17 16:42:11
            [end_time] => 2011-07-30 00:00:00
            …
        )

    [1] => stdClass Object
        (
            [id] => 2
            …
            [start_time] => 2011-07-17 17:02:13
            [end_time] => 2011-07-20 00:00:00
            …
        )

)

Ich nutze CodeIgniter und Active Record um die Daten aus der Datenbank zu holen.

Und obwohl es ein Objekt ist (oder scheinbar auch nicht), erhalte ich für diese Abfrage …
PHP:
$row->end_time->format('Y-m-d H:i')
… die Fehlermeldung, dass es sich bei end_time um kein Objekt handelt.
Code:
Call to a member function date() on a non-object

Was ist es, das ich hier übersehe? Wie kann ich mein Datum formatieren?

Danke und Grüße
- suntrop -
 
Hallo,

die Meldung sagt eigentlich schon, was Sache ist. Du musst ein Objekt vom Typ DateTime erzeugen und dieses kannst du dann formatieren. Leider benötigt der DateTime-Constructor ein bestimmtes Format als String um daraus ein DateTime-Objekt erstellen zu können - nämlich ein ISO 8601 Format oder einen Unix-Zeitstempel.

Um aus deinem SQL-DateTime ein Unix-Timestamp zu erstellen, kannst du die Funktion UNIX_TIMESTAMP() verwenden:

SQL:
SELECT UNIX_TIMESTAMP(start_time) AS start_timestamp, UNIX_TIMESTAMP(end_time) AS end_timestamp FROM tabelle WHERE id = 123;

Dann kannst du den start_timestamp bzw. den end_timestamp einfach als Argument an den Constructor von DateTime übergeben:

PHP:
$startTimeObj = new DateTime($row->start_timestamp);
echo $startTimeObj->format('Y-m-d H:i');
 
Danke für deine schnelle Hilfe.

Ok, das wusste ich nicht. Ich hätte unter Eid ausgesagt, dass ich früher immer mit date_format() meine MySQL Zeiten angepasst hatte. Vielleicht habe ich es doch häufiger direkt per MySQL gemacht. :)

Das geht zwar in CI mit Active Records auch, aber ich dachte die PHP-Variante wäre "leichter".
 
Zurück