Rossi: Datum aus sql-Datenbank im deutschen Format ausgeben

Tag zusammen!

Kurz noch zu meinem gestrigen Problem: Ich bin jetzt draufgekommen, wie die Datenbank bei einem Eintrag das Datum automatisch dazufügt. Man verwendet statt dem Datentyp "DATE" einfach "TIMESTAMP" und eine Länge von "8". Jedes mal, wenn jemand dann einen Eintrag macht, befindet sich das Eintragsdatum dann automatisch im Datensatz, ohne daß ich mich von der php-Seite aus noch drum kümmern muß.

Aber nun zur Ausgabe in einer neuen php-Seite:

Ich hab jetzt eine php-Seite erstellt, wo unter einem bestimmten Artikel alle Feedbacks zu diesem Artikel aufgelistet werde. Dazu hat jeder Artikel eine ID-Nummer. ( In der Datenbank als "deedbackid" )
Das ganze funktioniert auch tadellos.

Kann mir bitte wer sagen, wie und wo ich den Code (siehe unten )verändern muß, daß z.B. statt "20031127" ein "27.11.2003" ausgegeben wird? Bei all meinen Herumspielerein schaff ich höchstens ein "1.1.1970" bei allen Einträgen.

DANKE!

Rossi

-----

Und DAS ist (auszugsweise )der Quellcode :

<?
$abfrage = "SELECT datum, vorname, familienname, feedback FROM feedbacks WHERE feedbackid = 1 ORDER BY datum";
$ergebnis = mysql_query($abfrage);
$num_rows = mysql_num_rows($ergebnis);
echo "$num_rows\n";
?>
Feedbacks:
<br/><br/>
<?
while($row = mysql_fetch_object($ergebnis))
    {
    echo $row->vorname," ";
    echo $row->familienname," schrieb am ";
    echo $row->datum," :<br/><br/>";
    echo $row->feedback,"<br/><br/><br/>";

}
    ?>

-----

  1. hi,

    Kann mir bitte wer sagen, wie und wo ich den Code (siehe unten )verändern muß, daß z.B. statt "20031127" ein "27.11.2003" ausgegeben wird?

    schau dir mal die mysql-funktion DATE_FORMAT() an, http://www.mysql.de/doc/de/Date_and_time_functions.html.

    damit dürfte das ein kinderspiel sein.

    gruss,
    wahsaga

    1. schau dir mal die mysql-funktion DATE_FORMAT() an, http://www.mysql.de/doc/de/Date_and_time_functions.html.

      damit dürfte das ein kinderspiel sein.

      gruss,
      wahsaga

      Danke whsage, die Seite hatte ich heute schon vor mir, konnte aber nicht viel damit anfangen. Ich hab mal wo gelesen, daß ich das Datum einfach per php von 20031127 auf ==> 27.11.2003 umändern kann. Die Frage ist nur wie?

      Ich schaffe es leider weder mit php, noch mit der von Dir oben empfohlenen Seite, mein Ziel zu erreichen. :-(

      Grüße

      Rossi

      1. hi!

        warum hilft dem mann den keiner?!

        echo strftime("%d.%m.%Y",$DEIN_TIMESTAMP);

        "%d" steht für day
        "%m" steht für month
        "%Y" steht für vierstellige jahreszahl

        auf der dir genannten php-docu-seite findest du weitere
        parameter, z.b. um den wochentag oder die uhrzeit des
        timestamps auszugeben...

        gruß
        cheops

        schau dir mal die mysql-funktion DATE_FORMAT() an, http://www.mysql.de/doc/de/Date_and_time_functions.html.

        damit dürfte das ein kinderspiel sein.

        gruss,
        wahsaga

        Danke whsage, die Seite hatte ich heute schon vor mir, konnte aber nicht viel damit anfangen. Ich hab mal wo gelesen, daß ich das Datum einfach per php von 20031127 auf ==> 27.11.2003 umändern kann. Die Frage ist nur wie?

        Ich schaffe es leider weder mit php, noch mit der von Dir oben empfohlenen Seite, mein Ziel zu erreichen. :-(

        Grüße

        Rossi

      2. Leute, ich hab`s! *freu*

        Also obwohl mir das offensichtlich nicht jeder glaubt, das Datum kommt mal automatisch bei jedem Eintrag in die Datenbank, in dem ich als Typ "TIMESTAMP" und als Länge "8" genommen habe.

        Trage ich jetzt zum Beispiel ein Feedback ein und fülle nur die Felder Vorname, Nachname und das Feedback aus, dann steht anschließend automatisch ein 20031127 im Feld "datum".

        Und HIER DIE LÖSUNG zur AUsgabe :

        Der Code bei der Abfrage muß lauten :

        $abfrage = "SELECT DATE_FORMAT(datum, '%d.%m.%Y') AS datum , vorname, familienname, feedback FROM feedbacks WHERE feedbackid = 1 ORDER BY datum";

        Der Rest bleibt gleich ( so wie in meinem ursprünglichen Posting )

        Ich bin da aber auch nuer zufällig durch diese Seite draufgekommen : http://www.ideenreich.com/programmierung/mysql.shtml

        Es ist zwar technisch das, was auf der von wahsaga empfohlenen Seite steht, nur daß dort die entscheidende Formulierung für die Affrage nicht steht. Das zeigt wieder, daß solche Seiten sicher ein Super-Nachschlagewerk für Profis sind, aber für so dumme php und sql Anfänger wie ich einer bin absolut NULL Hilfe sind.

        Nochmals Danke an wahsaga + CO

        Grüße

        Rossi

      3. hi,

        schau dir mal die mysql-funktion DATE_FORMAT() an, http://www.mysql.de/doc/de/Date_and_time_functions.html.

        Danke whsage, die Seite hatte ich heute schon vor mir, konnte aber nicht viel damit anfangen. Ich hab mal wo gelesen, daß ich das Datum einfach per php von 20031127 auf ==> 27.11.2003 umändern kann. Die Frage ist nur wie?

        klar geht das mit php, aber es ist (in diesem falle) umständlicher, und auch gar nicht nötig, wenn es doch schon die DB machen kann.

        also los, schauen wir uns die seite doch mal zusammen an:

        da gibt's doch eigentlich genug, beispiel,
        select DATE_FORMAT('1997-10-04 22:23:00', '%W%M%Y');
        ergibt 'Saturday October 1997'
        select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s');
        ergibt '22:23:00'

        du willst natürlich nicht '1997-10-04 22:23:00' in der query angeben, sondern der wert aus deiner spalte namens datum holen, also:

        SELECT DATE_FORMAT(datum, "... formatierungsanweisungen ...")

        so, jetzt zu eben diesen formatierungsanweisungen.
        du möchtest das format tag.monat.jahr, tag und monat dabei jeweils zweistellig mit führenden nullen, das jahr vierstellig, korrekt?

        also suchen wir uns mal aus der tabelle raus, welche parameter wir dazu brauchen.
        %d  Tag des Monats, numerisch (00 bis 31)
        %m  Monat, numerisch (01 bis 12)
        %Y  Jahr, numerisch, 4 Ziffern

        na also, da haben wir doch schon alles, was wir brauchen!

        DATE_FORMAT(datum, "%d.%m.%Y") wird also unser datum so formatieren, wie wir es haben wollen (gross-/kleinschreibung der parameter hierbei beachten!).

        so, jetzt nehmen wir noch einen alias dazu, damit das formatierte datum auch einen "spaltennamen" bekommt, unter dem du es in php ansprechen kannst - deine komplette query lautet also nun:

        "SELECT DATE_FORMAT(datum, "%d.%m.%Y") as datumformatiert, vorname, familienname, feedback FROM feedbacks WHERE feedbackid = 1 ORDER BY datum"

        und in deinem php-teil gibst du jetzt statt dem wert von $row->datum einfach den wert von $row->datumformatiert aus.

        gruss,
        wahsaga

        1. Zunächst mal DANKE DANKE DANKE wahsaga, daß Du Dir die Mühe gemacht hast, es mir so zu erklären. Hast Du mein Posting " Rossi ==> Lösung " gelesen?

          Ich glaub, dann hab ich es ja eh genau so gemacht, wie Du grad geschrieben hast. ABer dieses " select ... as ... " stand nicht dort. Drum kam ich nicht weiter.

          Ich hab jetzt nur eine ganz blöde Frage *g* : Das, was wir da grad getan haben, also die Umänderung des Formats, ist doch php und nicht syl, oder?

          Ich frag, weil Du gemeint hast, mit sql gehts einfacher als mit php.

          Oder bring ich das nur durcheinander, weil das ganze innerhalb eines php-Bereichs steht.

          Sorry, wenn die Frage sehr dumm ist.

          Rossi :-)

          1. hi,

            Zunächst mal DANKE DANKE DANKE wahsaga, daß Du Dir die Mühe gemacht hast, es mir so zu erklären. Hast Du mein Posting " Rossi ==> Lösung " gelesen?

            ja, du bist offenbar selber drauf gekommen, während ich das posting noch am schreiben war ;-)

            Ich hab jetzt nur eine ganz blöde Frage *g* : Das, was wir da grad getan haben, also die Umänderung des Formats, ist doch php und nicht syl, oder?

            nein, das ist eine mysql-funktion, die direkt in der mysql-query hingeschrieben, und dann auch von mysql beim auslesen der daten angewendet wird.

            php braucht hier _nichts mehr_ zu tun, um die formatierung des datums zu erreichen - php bekommt bereits von der datenbank das fertig formatierte datum geliefert.

            gruss,
            wahsaga

  2. Hallo,

    Kann mir bitte wer sagen, wie und wo ich den Code (siehe unten )verändern muß, daß z.B. statt "20031127" ein "27.11.2003" ausgegeben wird? Bei all meinen Herumspielerein schaff ich höchstens ein "1.1.1970" bei allen Einträgen.

    http://www.mysql.com/doc/en/Date_and_time_functions.html#IDX1351

    gruß,
    Severin

    --
    Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
    --Philip K. Dick
  3. hi Rossi,

    Kurz noch zu meinem gestrigen Problem: Ich bin jetzt draufgekommen, wie die Datenbank bei einem Eintrag das Datum automatisch dazufügt. Man verwendet statt dem Datentyp "DATE" einfach "TIMESTAMP" und eine Länge von "8". Jedes mal, wenn jemand dann einen Eintrag macht, befindet sich das Eintragsdatum dann automatisch im Datensatz, ohne daß ich mich von der php-Seite aus noch drum kümmern muß.

    ich bin mir da nicht ganz sicher, aber ich würde mal sagen, das klappt so nicht. und deswegen kommt auch immer diese anzeige 01.01.1970, weil ,das der erste wert des timestamps ist, wo er anfängt, die sekunden hoch zu zählen. und wenn mich nicht alles täuscht, dann hast du immer dieses startdatum drinne und nicht das aktuelle post datum.

    ich habe mal bei mysql geschaut und es dir auch bei deinem gestrigen post geschrieben, dass bei datumstypen immer ein konstanter wert als default stehen muss.
    deshalb wirst du meiner meinung auch nicht herum kommen, einen datumswert auch immer in deine datenbank mit einzutragen. das ist aber sehr einfach, zum beispiel mit der funktion current_date() unter mysql, wenn du nur das datum brauchst.

    Ilja

    1. Hi Ilja!

      Nein, es klappt. Hab mich jetzt herumgespielt und vor jedem Eintrag meine Systemzeit auf ein anderes Datum gestellt. Und ohne, daß ich IRGEND eine Anweisung zusätzlich habe, steht wirklich immer das Datum des Eintrages ( Systemzeit ) in der Datenbank.

      Rossi

      1. hi Rossi,

        Nein, es klappt.

        ahh, um so besser. wieder selbst was gelernt.

        Ilja

    2. Hallo Ilja,

      Man verwendet statt dem Datentyp "DATE" einfach "TIMESTAMP" und eine Länge von "8". Jedes mal, wenn jemand dann einen Eintrag macht, befindet sich das Eintragsdatum dann automatisch im Datensatz, ohne daß ich mich von der php-Seite aus noch drum kümmern muß.

      ich bin mir da nicht ganz sicher, aber ich würde mal sagen, das klappt so nicht.

      Oh doch! TIMESTAMP wird in der Regel bei jeder INSERT und UPDATE Anweisung automatisch aktualisiert: http://www.mysql.com/doc/en/DATETIME.html

      Gruß,

      Johannes

      --
      ss:| zu:} ls:[ fo:} de:] va:} ch:) sh:( n4:| rl:( br:< js:| ie:{ fl:( mo:}