DigitalRatte: Formatieren von Datum - Rätsel?

Hallo,

helft mir biite beim folgenden Quelltext:

<?
$sqlab = "select * from table";
$result = mysql_db_query($sqlbase, $sqlab);
while ($row = mysql_fetch_array($result)) {
  echo $row['datum']."----";
  echo date("d M Y", $row['datum'])."<br>";
};
?>

Die Ausgabe davon sowie lokal alsauch auf dem Server lautet:

20030107150529----19 Jan 2038
20030107151023----19 Jan 2038

In der Datenbank steht timestamp now() für den Eintrag. Warum ist es denn kein gültiges UNIX-Format? Grübel
Danke.

  1. Ich habs ganz einfach so gemacht:

    $datum = "$datensatz[datum]";
    $Jahr = substr($datum,2,2);
    $Monat = substr ($datum,4,2);
    $Tag = substr ($datum,6,2);
    $Std = substr ($datum,8,2);
    $Min = substr ($datum,10,2);
    $datumkurz =  "$Tag.$Monat.$Jahr";

    Gruss
    Raffi

    1. Danke Raffi,

      das ist auch logisch, aber wie komme ich trotzdem an timestamp, damit ich z.B. Monat und Wochentag mit date() als Wörter ausgeben kann. Irgendetwas mache ich doch falsch...

      1. Hallo!

        Du musst dafür deine SQL-Abfrage etwas erweitern und zwar den * hinter dem SELECT durch die ganzen einzelnen Felder ersetzen. Das sollte also in etwa so aussehen:
        SELECT feld1, feld2, datum, feld3, ... FROM table
        Nun gibt es eine Funktion im MySQL die diesen MySQL-Timestamp in einen UNIX-Timestamp umwandelt und das sieht dann aus wie folgt:
        SELECT feld1, feld2, UNIX_TIMESTAMP(datum), feld3, ... FROM table

        Damit sollte es dann funktionieren.

        MfG,
        Mirko Hansen

  2. Hallo DigitalRatte,

    Die Ausgabe davon sowie lokal alsauch auf dem Server lautet:
    20030107150529----19 Jan 2038
    20030107151023----19 Jan 2038
    In der Datenbank steht timestamp now() für den Eintrag. Warum ist es denn kein gültiges UNIX-Format? Grübel

    UNIX-Timestamps sind die Zeit in (Milli)sekunden seit 1.1.1970 0Uhr oder so ähnlich. Der DB-Zeitstempel ist eine komplette Datumsangabe. Du musst also erstmal mit mktime oder ähnlichem einen UNIX-Zeitstempel basteln.

    viele Grüße
      Achim Schrepfer

    --
    "Wer noch nie einen Fehler gemacht hat, der hat sich noch nie an etwas Neuem versucht."
    (Albert Einstein)
  3. Danke für eure Hilfe,

    ich habe mir jetzt folgendes gebastelt und es geht auch:

    $sqlab = "select * from table";
    $result = mysql_db_query($sqlbase, $sqlab);
    while ($row = mysql_fetch_array($result)) {
      $datum = "$row[datum]";
      $y = substr($datum,2,2);
      $d = substr ($datum,4,2);
      $m = substr ($datum,6,2);
      $h = substr ($datum,8,2);
      $m = substr ($datum,10,2);
      echo date("d. F Y", mktime(0,$h,$d,$d,$m,$y));;
    };

    Aber muss es wirklich so kompliziert sein?

    1. Hallo DigitalRatte,

      $datum = "$row[datum]";
      [...]
        echo date("d. F Y", mktime(0,$h,$d,$d,$m,$y));;

      wenn ich das richtig verstanden habe, ist doch $row[datum] ein einfacher timestamp, oder?
      dann kannst du den doch einfach der date()-Funktion übergeben (mit deinem substr und dem mktime machst du doch auch nichts anderes, als einen Timestamp zu produzieren), also so:

      while (...) {
       echo date("d. F Y", $row[datum]);
      }
      btw: das 'F' für den ausgeschriebenen Monat steht (auf englisch, nicht auf deutsch) weiß du?

      man möge mich korrigieren wenn ich falsch liege :-)

      Grüße aus Nürnberg
      Tobias

      1. Hallo,

        $datum = "$row[datum]";

        Hier sollte besser: $datum = $row['datum']; stehen.

        [...]
          echo date("d. F Y", mktime(0,$h,$d,$d,$m,$y));;

        wenn ich das richtig verstanden habe, ist doch $row[datum] ein einfacher timestamp, oder?
        dann kannst du den doch einfach der date()-Funktion übergeben (mit deinem substr und dem mktime machst du doch auch nichts anderes, als einen Timestamp zu produzieren), also so:

        while (...) {
        echo date("d. F Y", $row[datum]);
        }

        So ähnlich (nur ein anderes Format) stand es schon im OP.

        [...]
        man möge mich korrigieren wenn ich falsch liege :-)

        OK. Der Timestamp in MySql ist abhängig von der Feldbreite eine Datumsangabe im ISO-weisnichtmehr-Format. Sie beginnt mit der größten Einheit (Jahr) und endet mit der kleinsten Einheit (Sekunden), wobei die Werte ohne Trennzeichen aneinander gereiht werden. Demnach ist die einfachste Möglichkeit den Code anzupassen, die Abfrage nach Mirkos Vorschlag zu ändern.

        Gruß Alex