Aus Array deutsches Datum formatieren?

preko

Erfahrenes Mitglied
Hi,

ich habe ein kleines Gästebuch, welches folgendes Abfragescript aus einer MySQL Datenbank hat:

Code:
include ("pass.php");
$db = @mysql_connect($host, $user, $password)
	or die ("Verbindung mit MySQL-Server fehlgeschlagen!");
@mysql_select_db($database, $db)
	or die ("Verbindung mit Datenbank fehlgeschlagen!");
$sql_query = "SELECT * FROM gaestebuch ORDER BY datumzeit ASC"; 
$ergebnis=mysql_query($sql_query); 
while ($satz=mysql_fetch_row($ergebnis)) {
		echo "<p><table width=500 border=1 cellpadding=5 cellspacing=2><tr><td>";
		echo "<a href='mailto:$satz[3]'>".$satz[1]." ".$satz[2]."</a> hat am ".$satz[0]." folgenden Beitrag eingestellt:</td>";
		echo "</tr>";
		echo "<tr><td>";
		echo "<font size=2>".$satz[4]."</font></td>";
		echo "</tr></table></p>";
		}
mysql_close($db);

Das Datum wird als Timestamp in der Datenbank hinterlegt und mit $satz[0] vom Script ausgelesen.

Wie kann ich nun die Ausgabe, welche momentan wie folgt im Gästebuch aussieht: 20040622141900 in ein deutsches Datums- und Zeitformat umwandeln?

Ich habe nun schon im Forum "geblättert", aber Datumsformate aus einem Arrayteil habe ich nicht gefunden. Bin leider noch PHP-Neuling, daher bitte ich um einen Denkanstoß, wie sich so etwas realisieren lassen könnte.

Beste Grüße,
Preko
 
Original geschrieben von preko
Ich habe nun schon im Forum "geblättert", aber Datumsformate aus einem Arrayteil habe ich nicht gefunden. Bin leider noch PHP-Neuling, daher bitte ich um einen Denkanstoß, wie sich so etwas realisieren lassen könnte.
Es spielt keine Rolle wo der Timestamp herkommt. Solang es ein Timestamp ist, kannst Du diesen mittels der Funktion [phpf]date[/phpf] nach Deinen Wünschen formatiert ausgeben lassen.

Du kannst Dir aber auch die Arbeit ersparen und die Spalte in der Datenbank auf datetime ändern und dann direkt beim auslesen das Datum formatiert ausgeben lassen.
 
@ Chino,

vielen Dank, habe gerade erst das Feld von "datetime" auf "timestamp" geändert, da ich irgendwo im Forum las, das es "einfacher" wäre den Timestamp zu benutzen.

Als ich noch "datetime" verwendet habe, blieben die Felder in der Datenbank immer leer mit der Standardeingabe 0000-00-00..., etc.. Mit dem Timestamp habe ich wenigstens direkt einen Wert in der Datenbank. Was nun? :)

Beste Grüße,
Preko
 
Original geschrieben von preko
vielen Dank, habe gerade erst das Feld von "datetime" auf "timestamp" geändert, da ich irgendwo im Forum las, das es "einfacher" wäre den Timestamp zu benutzen.
Mit einer Datetime-Spalte kannst Du viel einfacher Datumsbrechnungen durchführen also mit einer Timestamp-Spalte. Daher würde ich immer den Typ datetime empfehlen :)

Original geschrieben von preko
Als ich noch "datetime" verwendet habe, blieben die Felder in der Datenbank immer leer mit der Standardeingabe 0000-00-00..., etc.. Mit dem Timestamp habe ich wenigstens direkt einen Wert in der Datenbank. Was nun? :)
PHP:
$strSQL = "INSERT INTO tabelle (colum1, colum2, stamp_insert) VALUES ('foo','bar',NOW())";
mysql_query($strSQL);
Für weiter Datumsbefehle in mySQL lies Dir am besten das Handbuch durch: http://dev.mysql.com/doc/mysql/de/Date_and_time_functions.html
 
Original geschrieben von Chino
...
PHP:
$strSQL = "INSERT INTO tabelle (colum1, colum2, stamp_insert) VALUES ('foo','bar',NOW())";
mysql_query($strSQL);
...

Vielen Dank. Leuchtet mir ein. Ich habe jedoch einen "anderen" Zugang zur MySQl Datenbank.
Code:
$sql_insert="INSERT INTO 
            `gaestebuch` 
      SET 
            `ip` = '".$ip."',  
            `datumzeit` = '".$datumzeit."',  
            `vorname` = '".mysql_escape_string($vorname)."', 
            `nachname` = '".mysql_escape_string($nachname)."', 
            `email` = '".mysql_escape_string($email)."', 
            `text` = '".mysql_escape_string($text)."' 
            ";

Wie definiere ich $datumzeit so, dass er den "stamp_insert" Befehl ausführt mit der Anweisung "Now()"?


Beste Grüße,
Preko
 
Original geschrieben von preko
Wie definiere ich $datumzeit so, dass er den "stamp_insert" Befehl ausführt mit der Anweisung "Now()"?
stamp_insert ist kein Befehl, sondern einfach nur eine Spalte in der Tabelle. Ich hab sie halt nur anders benannt für das Beispiel.

PHP:
$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)."'
            ";
 
@ Chino,

herzlichen Dank für die wertvollen Tipps. Naja, es dauert manchmal lange, aber irgendwann... :-)

Ich habe es wie folgt gelöst:

Eingabe:
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)."' 
            ";

Ausgabe:
Code:
$sql_query = "SELECT * FROM gaestebuch ORDER BY datumzeit DESC"; 
$ergebnis=mysql_query($sql_query); 
while ($satz=mysql_fetch_row($ergebnis)) {
		echo "<p><table width=450 border=0 cellpadding=5 cellspacing=2><tr><td bgcolor='#D1CFCF'>";
		echo "<a href='mailto:$satz[4]'>".$satz[2]."</a> <a href='mailto:$satz[4]'>".$satz[3]."</a> hat am ".$satz[0]=date("d.M.Y, H:i:s")." Uhr <br />folgenden Beitrag eingestellt:</td>";
		echo "</tr>";
		echo "<tr><td bgcolor='#EBEBEB'>";
		echo $satz[5]."</td>";
		echo "</tr></table></p>";
		}
mysql_close($db);

Entscheidend ist die Datumsformatierung in der folgenden Zeile des Ausgabescriptes:

echo "<a href='mailto:$satz[4]'>".$satz[2]."</a> <a href='mailto:$satz[4]'>".$satz[3]."</a> hat am ".$satz[0]=date("d.M.Y, H:i:s")." Uhr <br />folgenden Beitrag eingestellt:</td>";

So werde ich nun den Anforderungen des Forums gerecht auch den Lösungsweg zu präsentieren, wenn mir geholfen wurde.

Nochmals vielen Dank für die wertvolle Hilfe! ;)

Beste Grüße,
Preko
 
Desweiteren kannst du das Datum für die Ausgabe wie folgt formatieren:
PHP:
<?php
  [...]
  include("pass.php");

  $db = @mysql_connect($host, $user, $password)
    or die ("Verbindung mit MySQL-Server fehlgeschlagen!");
  @mysql_select_db($database, $db)
    or die ("Verbindung mit Datenbank fehlgeschlagen!");
  $sql_query = "
	SELECT
	        `ip`,
	        CONCAT(ELT(DAYOFWEEK(`datumzeit`), 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'), DATE_FORMAT(`datumzeit`, ', den %e.%c %Y um %T')) AS `datumszeile`
	        `vorname`,
	        `nachname`,
	        `email`,
	        `text`
	  FROM
	        `gaestebuch`
	  ORDER BY
	        `datumzeit` ASC
	";
  $ergebnis = mysql_query($sql_query);
  while( $satz = mysql_fetch_array($ergebnis, MYSQL_ASSOC) ) {
    echo "<p><table width=\"500\" border=\"1\" cellpadding=\"5\" cellspacing=\"2\"><tr><td>";
    echo "<a href=\"mailto:".$satz['email']."\">".$satz['vorname']." ".$satz['nachname']."</a> hat am ".$satz['datumzeit']." folgenden Beitrag eingestellt:</td>";
    echo "</tr>";
    echo "<tr><td>";
    echo "<font size=\"2\">".$satz['text']."</font></td>";
    echo "</tr></table></p>";
  }
  mysql_close($db);
  [...]
?>

Weitere Informationen:
&nbsp;&rsaquo;&rsaquo;&nbsp;MySQL Manual | 7.3.4 Datums- und Zeit-Funktionen &rsaquo; DATE_FORMAT()
 
Original geschrieben von preko
@ Chino,

herzlichen Dank für die wertvollen Tipps. Naja, es dauert manchmal lange, aber irgendwann... :-)
Kein Problem, dazu ist ja schliesslich das Forum hier da :)

Du könntest jetzt ja noch natürlich das Datum direkt in der SQL-Anweisung formatieren lassen. Lies Dir einfach mal das Handbuch zu den verschiedenen Datumsfunktionen in mySQL-Durch (Link hatte ich oben bereits gepostet).
 
Zurück