Ankündigung

Einklappen
Keine Ankündigung bisher.

Datumsformat "Monat Jahr" eingeben und sortiert ausgeben.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datumsformat "Monat Jahr" eingeben und sortiert ausgeben.

    Hallo zusammmen,

    ich habe folgendes Problem:

    Mittels eines Formulars gebe ich ein Datum in dem Format "Monat Jahr" (zb. März 2009) ein. Die Daten werden in einer MYSQL DB (bisher als VARCHAR) gespeichert.
    Nun möchte ich die Daten aber sortiert ausgeben, sodass zb. folgende Ausgabe erscheint:

    März 2009
    Februar 2009
    Januar 2009

    Ich habe bereits rausgefunden, dass ich das Datum direkt nach der Eingabe mit explode() umwandeln muss.
    Leider finde ich nichts, was mich da weiter bringt. Wie genau wandele ich das Datum um und ich welches Format (UNIX timestamp?) und mit welchem Feldtyp (Date?) muss ich das Datum abspeichern?
    Wie wandele ich das Datum bei der Ausgabe wieder um?

    Ich hoffe, jemand kann mir die Richtung zeigen und ein paar Tipps geben
    Danke im Voraus

    MfG dahead

  • #2
    Datentyp: DATE
    Eingabe: jjjj-mm-dd
    Schau dir die Datums- und Zeitfunktionen an, die helfen bei der Ausgabe, aber auch beim Suchen und Sortieren.

    Kommentar


    • #3
      Die Eingabe MUSS in dem Format "Monat Jahr" erfolgen.

      Danke für den Hinweis.

      Kommentar


      • #4
        Zitat von dahead Beitrag anzeigen
        Die Eingabe MUSS in dem Format "Monat Jahr" erfolgen.

        Danke für den Hinweis.
        Es zwingt dich niemand die Daten exakt so abzuspeichern, wie sie eingegeben wurden, und sie später so auszugeben, wie sie gespeichert wurden.

        Kommentar


        • #5
          Zitat von dahead Beitrag anzeigen
          Die Eingabe MUSS in dem Format "Monat Jahr" erfolgen.
          Ich nehme mal an, dass das über SELECT-Boxen erfolgt. Diesen kannst du ja über das VALUE-Attribut direkt schon die nummerischen Monate mitgeben.

          Kommentar


          • #6
            Zitat von lazydog Beitrag anzeigen
            Ich nehme mal an, dass das über SELECT-Boxen erfolgt. Diesen kannst du ja über das VALUE-Attribut direkt schon die nummerischen Monate mitgeben.
            Nein, es erfolgt über ein ganz normales INPUT Eingabefeld.

            Kommentar


            • #7
              Zitat von dahead Beitrag anzeigen
              Nein, es erfolgt über ein ganz normales INPUT Eingabefeld.
              Da gibt der erste dir März ein, der Zweite Maerz und der Dritte Mährz - das geht besser mit einer Select/Option-Box für beide Datenfelder.

              So oder so: In deine Tabelle solltest du das in eine Spalte vom Typ date speichern. Wenn der Tag für deine Anwendung unwichtig ist, dann nimmst du immer den ersten des Monats. Auf diese Weise kannst du immer die sehr mächtigen SQL-Datumfunktionen nutzen.

              Kommentar


              • #8
                Ist vielleicht nicht optimal, aber ich habe mein Problem folgendermaßen gelöst.
                Monat und Jahr werden mitttels zweier SELECT Boxen eingegeben.

                Beim Abschicken des Formulars:

                PHP-Code:
                $Monat $_POST['Monat'];
                $Jahr $_POST['Jahr'];
                $Titel $_POST['Titel'];
                $Beschreibung $_POST['Beschreibung'];
                $Link $_POST['Link'];
                                            
                switch (
                $Monat) {
                case 
                "Januar":
                $month_num "01";
                break;
                case 
                "Februar":
                $month_num "02";
                break;
                case 
                "März":
                $month_num "03";
                break;
                case 
                "April":
                $month_num "04";
                break;
                case 
                "Mai":
                $month_num "05";
                break;
                case 
                "Juni":
                $month_num "06";
                break;
                case 
                "Juli":
                $month_num "07";
                break;
                case 
                "August":
                $month_num "08";
                break;
                case 
                "September":
                $month_num "09";
                break; 
                case 
                "Oktober":
                $month_num "10";
                break;  
                case 
                "November":
                $month_num "11";
                break;
                case 
                "Dezember":
                $month_num "12";
                break;
                }

                $Datum $Jahr."-".$month_num."-01";
                        
                $add sprintf("INSERT INTO tbl_date (id, date) VALUES ('', '%s')",
                                                
                mysql_real_escape_string($Datum));
                                                                                                                                                        
                $result_add mysql_query($add) OR die(mysql_error());
                                                                                                                                                                                
                if(
                $result_add) {
                    echo 
                "Erfolgreich hinzugefügt.";

                Und hier die Ausgabe:

                PHP-Code:
                $sql="SELECT MONTH(date) AS month, YEAR(date) AS year FROM tbl_date ORDER BY date DESC";        
                $resultmysql_query($sql) or die(mysql_error());        

                $monate = array(
                   
                1=>"Januar",
                   
                2=>"Februar",
                   
                3=>"März",
                   
                4=>"April",
                   
                5=>"Mai",
                   
                6=>"Juni",
                   
                7=>"Juli",
                   
                8=>"August",
                   
                9=>"September",
                   
                10=>"Oktober",
                   
                11=>"November",
                   
                12=>"Dezember");

                while(
                $row=mysql_fetch_array($result)){
                        
                $month $row['month'];
                        
                $year $row['year'];

                        echo 
                $monate[$month]." ".$year;

                Kritik?

                Vielen Dank schon mal für eure Tipps!

                MfG dahead

                Kommentar


                • #9
                  Hat keiner was dran auszusetzen?

                  Kommentar


                  • #10
                    Doch.
                    Warum lässt du den Kerl nicht einfach die Monatsnummer eingeben? Stell dir vor, ich gäbe jetzt märz statt März ein. Dein gesamtes Skript würde nicht mehr funktionieren. Wenn es unbedingt so sein soll, musst du mindestens noch strtolower() oder strtoupper() verwenden. Ferner würde ich mir deine switch-Orgie sparen und stattdessen ein assoziatives Array und eine Schleife nutzen.

                    Kommentar


                    • #11
                      Die Zuordnung Zahl -> Monat doppelt zu definieren ist auch unnötig.

                      Kommentar


                      • #12
                        Aber schon praktisch, wenn man nicht bedenken will, dass der Januar die 0 ist.

                        Kommentar


                        • #13
                          Wenn man das nicht bedenken will kann man es auch einfach so machen:
                          PHP-Code:
                          $months = array('''Januar''Februar''Schnitzel''Schnitzel''Schnitzel'); 
                          (ist natürlich unpraktisch wenn man das dann wieder irgendwo mit foreach oder so verwenden möchte.

                          Ich würde dem code oben noch ein strtolower() und ein trim() spendieren - dann ist zumindest sowas wie " april" abgefangen.

                          Kommentar


                          • #14
                            Ich meine, es doppelt zu definieren - in jedem Script extra, statt bspw, ein Setting oder ein Include zu verwenden.

                            Kommentar


                            • #15
                              Bei der Eingabe des Monats muss man nichts abfangen, weil es eine Dropdown Auswahlliste ist (SELECT).

                              Ich verstehe nicht ganz, ob ich in meinem Script noch etwas verbessern sollte

                              Kommentar

                              Lädt...
                              X