Ankündigung

Einklappen
Keine Ankündigung bisher.

Datumskonvertierung

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

  • Datumskonvertierung

    Moin moin,
    bin zwar Einsteiger aber wurde von nikosch genötigt
    Da immer wieder die Frage zur Datumskonvertierung aufkommt, hab ich mir gedacht, stell ich meine Datumskonvertierung hier vor.

    Das Datenbank-Problem:
    Englisches Format: YYYY-MM-DD
    Deutsches Format: DD.MM.YYYY

    Als erstes meine Functions-Datei konv.php:
    PHP-Code:
    <?php
    // Datum ins deutsche konvertieren (aus Datenbank):
    function konv_date($datum)
    {
        
    $jahr substr($datum,0,4);
        
    $mon  substr($datum,5,2);
        
    $tag  substr($datum,8,2);
        
    $datneu $tag.'.'.$mon.'.'.$jahr;
    return 
    $datneu;
    }
    // Datum ins englische konvertieren (für Datenbank):
    function konv_date2($datum)
    {
        
    $jahr substr($datum,6,4);
        
    $mon  substr($datum,3,2);
        
    $tag  substr($datum,0,2);
        
    $datneu $jahr.'-'.$mon.'-'.$tag;
    return 
    $datneu;
    }
    ?>
    Beispiel für EIN SELECT
    (ich geh davon aus, dass die Datenbank-Tabellen-Zelle immer "datum" heißt):
    PHP-Code:
    <?php
    include("konv.php"); // Die Functions-Datei einbinden
    $sql "SELECT * FROM TabelleXY
            WHERE ID = '"
    .$_GET['ID']."'";
    $erg mysql_query($sql);
    $row mysql_fetch_object($erg);
    {
    ?>
    <input name="datum" type="text" value="<?php echo konv_date($row->datum); ?>">
    oder einfach nur:
    <?php echo konv_date($row->datum);
    }
    ?>
    Beispiel für INSERT INTO und UPDATE:
    PHP-Code:
    <?php
    include("konv.php"); // Die Functions-Datei einbinden
    $sql "INSERT INTO TabelleXY SET
            ID          = '"
    .mysql_real_escape_string($_POST['ID'])."',
            datum       = '"
    .mysql_real_escape_string(konv_date2($_POST['datum']))."',
            wasweissich = '"
    .mysql_real_escape_string($_POST['wasweissich'])."'";
    mysql_query($sql);
    ?>
     
    <?php
    include("konv.php"); // Die Functions-Datei einbinden
    $sql "UPDATE TabelleXY SET
            wasweissich = '"
    .mysql_real_escape_string($_POST['wasweissich'])."',
            datum       = '"
    .mysql_real_escape_string(konv_date2($_POST['datum']))."'
            WHERE ID = '"
    .$_POST['ID']."'";
    mysql_query($sql);
    ?>
    Das ganze kann man auch noch entsprechend um die Uhrzeit erweitern.

    Also wie gesagt, mich nicht gleich erschlagen, bin Einsteiger.


    Sonnigen Gruß
    Sonnigen Gruß


  • #2
    Au, bei Beispiel 2 hast du SQL Injections außer Acht gelassen.
    Wenn ich so frei sein darf, werde ich die Codebeispiele an unseren Wiki-Coding-Standard anpassen und unter Scripts ins Wiki stellen.

    Beitrag editiert:
    […] Datumskonvertierung mit strtotime() und den MySQL-Datumsfunktionen sollte vielleicht noch aufgenommen werden.
    Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

    Kommentar


    • #3
      Wenn man eh ein Feld vom Datentyp DATE oder DATETIME in der Datenbank verwendet kann man sich die Daten auch von mysql direkt passend holen:

      DATE_FORMAT
      funktioniert ähnlich der date()-Funktion von php.
      Und für die umgekehrte Richtung kann man das Feld durch
      STR_TO_DATE
      robo47.net - Blog, Codeschnipsel und mehr
      | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

      Kommentar


      • #4
        Zitat von Manko10 Beitrag anzeigen
        Au, bei Beispiel 2 hast du SQL Injections außer Acht gelassen.
        Klär mich mal bitte genauer auf...


        Zitat von Manko10 Beitrag anzeigen
        Wenn ich so frei sein darf, werde ich die Codebeispiele an unseren Wiki-Coding-Standard anpassen und unter Scripts ins Wiki stellen.
        Immer zu
        Sonnigen Gruß

        Kommentar


        • #5
          kein real_escape bei:
          WHERE ID = '".$_GET['ID']."'";
          --

          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


          --

          Kommentar


          • #6
            Schon längst geklärt, nikosch!
            Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

            Kommentar


            • #7
              Bezog sich doch auf
              Klär mich mal bitte genauer auf...
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Achso.
                Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                Kommentar


                • #9
                  ich bin mal so frei:
                  PHP-Code:
                  // Datum ins deutsche oder englische konvertieren:
                  function konv_date($datum)
                  {
                      
                  $pos strpos($datum'-');
                         
                      if(
                  $pos === false$change '.' else $change '-';
                      
                      
                  $tmp explode($change$date);
                      
                      if(
                  $change == '.')
                        
                  $datneu $tmp[2].'-'.$tmp[1].'-'.$tmp[0];
                      else
                        
                  $datneu $tmp[2].'.'.$tmp[1].'.'.$tmp[0];
                    
                  return 
                  $datneu;

                  Da müßt man vielleicht noch den Parameter prüfen.
                  Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                  Kommentar


                  • #10
                    Ich würde beide if-Strukturen zusammenfassen. Weil der Zusammenbau an sich ja gleich ist.
                    Oder so:

                    PHP-Code:
                    // Datum ins deutsche oder englische konvertieren:
                    function konv_date($date)
                      {
                      if(
                    false === strpos($date'-')) {
                        return 
                    implode ('-' array_reverse (explode ('.' $date)));
                        } 

                      return 
                    implode ('.' array_reverse (explode ('-' $date)));
                      } 
                    PS: Du hast oben übrigens $date und $datum gemischt.
                    --

                    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                    --

                    Kommentar


                    • #11
                      ja - das sieht noch besser aus !
                      Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                      Kommentar


                      • #12
                        Moin moin
                        Zitat von Koala Beitrag anzeigen
                        ich bin mal so frei:
                        PHP-Code:
                        // Datum ins deutsche oder englische konvertieren:
                        function konv_date($datum)
                        {
                            
                        $pos strpos($datum'-');
                         
                            if(
                        $pos === false$change '.' else $change '-';
                         
                            
                        $tmp explode($change$date);
                         
                            if(
                        $change == '.')
                              
                        $datneu $tmp[2].'-'.$tmp[1].'-'.$tmp[0];
                            else
                              
                        $datneu $tmp[2].'.'.$tmp[1].'.'.$tmp[0];
                         
                        return 
                        $datneu;

                        Da müßt man vielleicht noch den Parameter prüfen.
                        Zitat von nikosch Beitrag anzeigen
                        Ich würde beide if-Strukturen zusammenfassen. Weil der Zusammenbau an sich ja gleich ist.
                        Oder so:

                        PHP-Code:
                        // Datum ins deutsche oder englische konvertieren:
                        function konv_date($date)
                          {
                          if(
                        false === strpos($date'-')) {
                            return 
                        implode ('-' array_reverse (explode ('.' $date)));
                            } 
                         
                          return 
                        implode ('.' array_reverse (explode ('-' $date)));
                          } 
                        PS: Du hast oben übrigens $date und $datum gemischt.
                        Wie denn nun genau?


                        Sonnigen Gruß
                        Sonnigen Gruß

                        Kommentar


                        • #13
                          Wie denn nun genau?
                          anschaun, unbekannte Funktionen ergooglen oder in der Doku nachlesen, testen, evtl. Variablen ausgeben lassen und wenn noch etwas unklar ist: im Forum fragen.

                          Was Du mit "wie denn nun genau?" meinst weiß ich nicht.
                          Eine if-else-Abfrage nimmt, ordentlich geschrieben eine Menge Platz weg. Platzsparend geht es mit einem ternären Operator.

                          Kommentar


                          • #14
                            Fehler abfangen

                            PHP-Code:
                            function konv_date($date) {
                                
                            $mein_datum '';
                                if(
                            false === strpos($date'-')) {
                                    
                            $datum explode ('.' $date);
                                    
                            $datum[0] = str_pad($datum[0], ,'0'STR_PAD_LEFT);
                                    
                            $datum[1] = str_pad($datum[1], ,'0'STR_PAD_LEFT);
                                    
                            $datum[2] = str_pad($datum[2], ,'19'STR_PAD_LEFT);
                                    
                            $mein_datum implode ('-' array_reverse ($datum));
                                    return 
                            $mein_datum;
                                } 
                                else {
                                    
                            $datum explode ('-' $date);
                                    
                            $datum[2] = str_pad($datum[2], ,'0'STR_PAD_LEFT);
                                    
                            $datum[1] = str_pad($datum[1], ,'0'STR_PAD_LEFT);
                                    
                            $datum[0] = str_pad($datum[0], ,'19'STR_PAD_LEFT);
                                    
                            $mein_datum implode ('.' array_reverse ($datum));
                                    return 
                            $mein_datum;
                                }

                            Für die Leute, die gern Fehler abfangen. Dadurch wird aus 3.8.88 trotzdem 1988-08-03

                            Gruß

                            Stefan

                            Kommentar


                            • #15
                              Der war doch schon fast 5 Jahre tot. Der ganze murks ist seit date_create_from_format fürn Eimer.
                              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                              Kommentar

                              Lädt...
                              X