Timestamp aus Array korrekt umwandeln?

preko

Erfahrenes Mitglied
Hallo,

ich habe folgende Zeile in einem Gästebuch-Script:

Code:
echo "<a href='mailto:$satz[4]'>".$satz[2]."</a> <a href='mailto:$satz[4]'>".$satz[3]."</a> hat am ".$satz[1]." Uhr <br />folgenden Beitrag eingestellt:";

Mit $satz[1] lese ich den Timestamp aus einer MySQL Tabelle aus. Dieser wird z.B. wie folgt ausgegeben: 20040624142024 , was ich ja noch nachvollziehen kann.

Das Problem das ich habe, ist, dass ich das deutsche Datum z.B. in der Form 01. Jun 2004, 14:26:00 ausgeben lassen möchte. Bitte - ich habe mir die Dokumentation zu Datums- und Zeitformatierungen angeschaut, im Forum gesucht und in meinen Büchern ohne ende gewälzt, aber ich habe die absolute Denkblockade. :(

Bin zwar PHP Neuling, aber so kompliziert kann es doch nicht sein, oder?

Wie muß ich die o.g. Codezeile umschreiben, damit das Datum entsprechend formatiert ausgegeben wird?

Beste Grüße,
preko
 
@snuu, @Chino,

nein, bin nicht über die date() funktion hinweggegangen. Habe sogar bei dem von Chino genannten Thread gedacht, dass ich das Problem gelöst hätte, aber das Ergebnis war, dass das aktuelle Datum angezeigt wurde und nicht das aus der Datenbank bezogene, formatierte. Das habe ich erst gemerkt, als ich auf den Refresh Button des Browsers ein paar Mal hinereinander gedrückt hatte. :(

Daher bin ich etwas konfus. ich weiß nicht, wie (wo) die entsprechende Formatfunktion eingebunden wird. Kann ich die in der vorab genannten Codezeile einbinden, oder wie läuft das rein technisch ab?

Kann ich nach dem prinzip arbeiten:
Code:
date("d M Y h:i:s")=$satz[1];

Ich verstehe nicht, wie ich aus dem Timestamp, der in dem $satz[1] hinterlegt ist ein formatiertes Datum quetsche?


Beste Grüße,
Preko
 
Original geschrieben von preko

nein, bin nicht über die date() funktion hinweggegangen.

(..)

Ich verstehe nicht, wie ich aus dem Timestamp, der in dem $satz[1] hinterlegt ist ein formatiertes Datum quetsche?

string date ( string Format [, int Timestamp])

Gibt einen formatierten String anhand eines vorzugebenden Musters zurück. Dabei wird entweder der angegebene Timestamp oder die gegenwärtige lokale Zeit berücksichtigt, wenn kein Timestamp angegegeben wird. Mit anderen Worten ausgedrückt: der Parameter Timestamp ist optional und falls dieser nicht angegeben wird, wird der Wert der Funktion time() angenommen.
Klingt eigentlich sehr verständlich.

PHP:
echo date("d M Y h:i:s",$satz[1]);
 
Wenn Du Dir die verlinkte Seite durchgelesen hättest, wüsstest Du, dass man noch den Timestamp als zweiten Parameter übergeben muss, den man formatieren will! Wird der Parameter nicht angegeben, wird das aktuelle Datum verwendet.

snuu
 
@Chino,

vielen Dank mit Deinem Tipp. Wenn ich mir die Lösung sehe, kann ich nun verstehen was gemeint war. Ich habe Deinen Rat befolgt, bekomme aber aus dem Timestamp: 20040624153953 (aus dem Feld der MySQL Datenbank rauskopiert) das folgende Datum raus: 19 Jan 2038, 04:14:07.

Eingebunden habe ich das ganze wie folgt:
Code:
echo "<a href='mailto:$satz[4]'>".$satz[2]."</a> <a href='mailto:$satz[4]'>".$satz[3]."</a> hat am ";echo date("d M Y, h:i:s",$satz[1]);" Uhr <br />folgenden Beitrag eingestellt:

Bin ich jetzt völlig Banane?

@Chino, @snuu:
eine kleine Entschuldigung zum Schluß. Vielleicht klingt es für Euch plausibel und logisch, aber die Syntax string date ( string Format [, int Timestamp]) hätte ich nicht als echo date("d M Y h:i:s",$satz[1]); abgeleitet. Erst wo ich es vor Augen habe, kann ich es logisch nachvollziehen.
Daher bitte nicht sauer sein, wenn ein Neuling etwas "Ladehemmung" hat mit der Syntaxbeschreibung in den Tutorials. Vielleicht für routinierte Programmierer o.k., für die, die es werden möchten, manchmal Böhmische Dörfer. ;)

Beste Grüße,
preko
 
Original geschrieben von preko
@Chino,

vielen Dank mit Deinem Tipp. Wenn ich mir die Lösung sehe, kann ich nun verstehen was gemeint war. Ich habe Deinen Rat befolgt, bekomme aber aus dem Timestamp: 20040624153953 (aus dem Feld der MySQL Datenbank rauskopiert) das folgende Datum raus: 19 Jan 2038, 04:14:07.
Hm, der Spaltentyp in der Tabelle ist timestamp richtig? Wie hast Du denn den Wert in die Datenbank eingetragen?

Jedenfalls sieht der Timestamp nicht richtig aus ;)

Nochmal eine Erklärung zum timestamp:
Gibt die seit Beginn der Unix-Epoche (Januar 1 1970 00:00:00 GMT) bis jetzt vergangenen Sekunden zurück.
Siehe auch [phpf]time[/phpf]

Wenn ich mir als folgenden Code

PHP:
<?php

echo 'aktueller unix timestamp: '.time().'<br />';
echo 'formatierter unix timestamp: '.date("d M Y, H:i:s",time());

?>
ausgeben lassen, dann erhalte ich

Code:
aktueller unix timestamp: 1088086085
formatierter unix timestamp: 24 Jun 2004, 16:08:05
Und der timestamp sieht doch etwas anders aus als Deiner :p

Original geschrieben von preko
Vielleicht klingt es für Euch plausibel und logisch, aber die Syntax string date ( string Format [, int Timestamp]) hätte ich nicht als echo date("d M Y h:i:s",$satz[1]); abgeleitet. Erst wo ich es vor Augen habe, kann ich es logisch nachvollziehen.
Daher bitte nicht sauer sein, wenn ein Neuling etwas "Ladehemmung" hat mit der Syntaxbeschreibung in den Tutorials. Vielleicht für routinierte Programmierer o.k., für die, die es werden möchten, manchmal Böhmische Dörfer. ;)
Du hättest eigentlich nur mal genauer in das Online-Manual schauen müssen. Denn ja wird mehrfach die Benutzung der Funktion beschrieben :p

Du hättest allerdings in den alten Thread schreiben können, anstatt einen neuen zu erstellen :rolleyes:
Aber jetzt sollte hoffe ich alles klar sein soweit.
 
@Chino,

ich habe den Timestamp wie folgt eingetragen:

Code:
$sql_insert="INSERT INTO 
            `gaestebuch` 
      SET 
            `ip` = '".$ip."',  
            `datumzeit` = Now(), 
            `vorname` = '".mysql_escape_string($vorname)."', 
            `nachname` = '".mysql_escape_string($nachname)."', 
            `email` = '".mysql_escape_string($email)."', 
            `text` = '".mysql_escape_string($text)."' 
            ";

also mit der Syntax: `datumzeit` = Now(), .

Und der timestamp sieht doch etwas anders aus als Deiner
Das ist mir schon aufgefallen, dass die Wertangabe in MySQL im prinzip eine unformatierte "Datumszeit" ist.

Das Feld in der MySQL Datenbank ist als "datumzeit" benannt, als Feldtyp "timestamp" definiert mit einer max. Zeichenfolge von 14 - rest siehe angehängte GIF-Datei.

Beste Grüße,
preko
 
Du könntest das Datum auch gleich während der Abfrage formatieren:
Code:
SELECT
        CONCAT(DAYOFMONTH(`datumzeit`), '. ', ELT(MONTH(`datumzeit`), 'Januar', 'Februar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezenber'), DATE_FORMAT(`datumzeit`, ' %Y, %h:%i:%s')) AS `datumzeit`
  FROM
        `tabelle`
 
Zurück