Cully: RFC822 konformes Datum aus SQL für PHP

Hallo,

um einen Newsfeed zu füttern, benötigt dieser ein RFC822 kompatibles Datum (Wed, 02 Oct 2002 13:00:00 GMT) - meine SQL DB spuckt aber nur "2007-04-22" aus...
Wie kann ich das denn entsprechend anpassen in PHP dass da auch das rauskommt was ich brauche?

  1. yo,

    welches dbms, welche version, welcher datentyp ?

    Ilja

    1. Du kannst Daten mit date() bearbeiten:

      <?php  
          $timestamp = "2002-10-02";  
          echo date("D, d M Y H:i:s", $timestamp) . " GMT";  
      ?>
      

      Ausgabe: Wed, 02 Oct 2002 13:00:00 GMT.

      1. <?php  
             $timestamp = "2002-10-02 13:00:00";  
             echo date("D, d M Y H:i:s", $timestamp) . " GMT";  
        ?>
        

        So muss es heißen (wenn noch eine Uhrzeit ausgegeben werden soll). Dazu muss das Format des Feldes, in dem der Timestamp gespeichert ist, auf DATETIME gesetzt werden.

        1. Super - vielen Dank für die Hilfe!

          Ein kleines Problem habe ich aber noch...

          Wie kann ich denn die Daten aus meiner DB explizit ausgeben (ohne das Datum als Konstante)?

          Ich nutze zZt. folgenden Code - bekomme als Datum aber immer nur den Standard 1 Jan 1970 raus...

            
          $timestamp = $ver['Datum'];  
             echo date("D, d M Y H:i:s", $timestamp) . " GMT";  
          
          

          <?php

          $timestamp = "2002-10-02 13:00:00";
               echo date("D, d M Y H:i:s", $timestamp) . " GMT";
          ?>

          
          >   
          > So muss es heißen (wenn noch eine Uhrzeit ausgegeben werden soll). Dazu muss das Format des Feldes, in dem der Timestamp gespeichert ist, auf DATETIME gesetzt werden.
          
          1. Wie kann ich denn die Daten aus meiner DB explizit ausgeben (ohne das Datum als Konstante)?

            Wie meinst du das?

            1. Wie gesagt ich bekomme als Ausgabe immer das richtige Format, wie ich das wollte - aber das Datum steht jetzt immer auf "Thu, 01 Jan 1970 01:33:22 GMT"

              Ich dachte zuerst das liegt an der Einbindung meiner Datenbank, aber auch mit deinem Script - wenn ich es 1:1 übernehme, bekomme ich das selbe Datum angezeigt.

              An was kann das denn noch liegen?

              Wie kann ich denn die Daten aus meiner DB explizit ausgeben (ohne das Datum als Konstante)?

              Wie meinst du das?

              1. Moin!

                Wie gesagt ich bekomme als Ausgabe immer das richtige Format, wie ich das wollte - aber das Datum steht jetzt immer auf "Thu, 01 Jan 1970 01:33:22 GMT"

                Erledige nichts mit PHP, was deine Datenbank viel besser tun kann. Der Vorschlag von Manko10 ist alles andere als optimal.

                Jede Datenbank hat Funktionen, die ein Datum oder eine Zeit nach beliebigen Aspekten formatieren kann. Nutze diese. PHP kümmert sich dann nur noch darum, den String durchzureichen.

                - Sven Rautenberg

                --
                "Love your nation - respect the others."
                1. Da es sich hier nicht um unmengen Daten handelt ist mir primär erstmal egal, ob die Lösung optimal ist - hauptsache ist sie funktioniert ;-)

                  Bin also für jeden weiteren Tip dankbar - auch weiterhin über PHP...

                  Wie würde denn alternativ die Ausgabe direkt per DB aussehen?

                  1. Moin!

                    Da es sich hier nicht um unmengen Daten handelt ist mir primär erstmal egal, ob die Lösung optimal ist - hauptsache ist sie funktioniert ;-)

                    Das ist ja das Problem: Es funktioniert bei dir ja nicht. Weil die Datenbank wohl keinen Unix-Timestamp rausrückt, der für die PHP-Funktion notwendig wäre. Müßte also erst konvertiert werden in der Datenbank.

                    Bin also für jeden weiteren Tip dankbar - auch weiterhin über PHP...

                    Wie würde denn alternativ die Ausgabe direkt per DB aussehen?

                    Welche DB ist es denn? MySQL bietet DATE_FORMAT() an. Wenn sowieso konvertiert werden muß, warum dann nochmal mit PHP nachkonvertieren?

                    - Sven Rautenberg

                    --
                    "Love your nation - respect the others."
                    1. Ich lass mich ja gerne eines besseren belehren!

                      Ja, ich nutze MySQL...
                      Die Abfrage müsste dann so aussehen?

                      $sql = "SELECT DATE_FORMAT(Datum, %a, %d %b %Y %H:%i:%s GMT) AS [Dat], Datum, Titel FROM news ORDER BY Datum DESC";

                      Moin!

                      Da es sich hier nicht um unmengen Daten handelt ist mir primär erstmal egal, ob die Lösung optimal ist - hauptsache ist sie funktioniert ;-)

                      Das ist ja das Problem: Es funktioniert bei dir ja nicht. Weil die Datenbank wohl keinen Unix-Timestamp rausrückt, der für die PHP-Funktion notwendig wäre. Müßte also erst konvertiert werden in der Datenbank.

                      Bin also für jeden weiteren Tip dankbar - auch weiterhin über PHP...

                      Wie würde denn alternativ die Ausgabe direkt per DB aussehen?

                      Welche DB ist es denn? MySQL bietet DATE_FORMAT() an. Wenn sowieso konvertiert werden muß, warum dann nochmal mit PHP nachkonvertieren?

                      • Sven Rautenberg
                    2. Jawoll, das war der Richtige Weg...!
                      Hat alles einwandfrei geklappt! Vielen Dank (euch beiden)!!

  2. Hallo Cully,

    um einen Newsfeed zu füttern, benötigt dieser ein RFC822 kompatibles Datum (Wed, 02 Oct 2002 13:00:00 GMT)

    Kleiner Tip: Es gibt das RSS Best Practises Profil, in dem einige hilfreiche Tips für RSS-Feeds zusammengetragen sind, u.a. auch für die Syntax von Daten. Es empfiehlt sich nur vierziffrige Jahre zu nehmen und bei Nicht-GMT-Zeitzonen numerische Notation (+0100/+0200 für Deutschland) zu nehmen.

    meine SQL DB spuckt aber nur "2007-04-22" aus...

    Du könntest spontan nach Atom wechseln, da wird ein Datum nach RFC 3339 so notiert: 2007-04-22T22:50:00+0200 ;)

    Tim