Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Datum DD.MM.YYYY umwandeln in YYYY-MM-DD wie?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Datum DD.MM.YYYY umwandeln in YYYY-MM-DD wie?

    Schönen guten Abend!

    Ich bekomme aus einem Webservice Datumsangaben im Format DD.MM.YYYY übermittelt und möchte die in einem normalen Datumsformat - also als YYYY-MM-DD - in eine MySQL-Datenbank schreiben, damit ich dann datumsbezogene Abfragen machen kann.

    Ich finde nur Antworten darauf, wie's umgekehrt geht, aber nicht in diese Richtung. Ich übernehme das Datum als DD.MM.YYYY-String in einer Variablen. Gibt's dafür eine Umwandlungsfunktion oder muss ich das anhand der Punkte in drei Teile zerlegen und die dann anders zusammensetzen?

    Danke für jeden Tipp!

  • #2
    Wie wäre es mit preg_replace() ?

    PHP-Code:
    echo preg_replace('/^(\\d{2})\\.(\\d{2})\\.(\\d{4})$/''$3-$2-$1''23.04.2014'); 

    Kommentar


    • #3
      Früher macht ich das mit substr, heute nutze ich strtotime.

      Kommentar


      • #4
        DateTime akzeptiert genau wie strtotime auch ein Datum im Format DD.MM.YYYY:
        PHP-Code:
        $str '23.04.2014';
        $dateStr date_create($str)->format('Y-m-d');  //2014-04-23 

        Kommentar


        • #5
          Zitat von jspit Beitrag anzeigen
          DateTime akzeptiert genau wie strtotime auch ein Datum im Format DD.MM.YYYY:
          PHP-Code:
          $str '23.04.2014';
          $dateStr date_create($str)->format('Y-m-d');  //2014-04-23 
          DAS habe ich gesucht!

          Das mit preg_replace funktioniert auch, aber so ist es natürlich wesentlich direkter.

          Wunderbar - vielen Dank für Eure Antworten!

          Kommentar


          • #6
            Bedenke aber das du dort auf gutdünken DateTime etwas übergibst. Du solltest einen Weg favorisieren der das tut was du erwartest. Im Fall von DateTime ist das eine spezifische Angabe einer Formatierung:

            PHP-Code:
            $str '23.04.2014';

            $dateStr date_create_from_format('d.m.Y'$str)->format('Y-m-d'); 
            Diese Methode: http://www.php.net/manual/de/datetime.getlasterrors.php ( siehe erstes Code-Beispiel )
            versetzt dich außerdem in die Lage auf Fehlerhafte Formate zu reagieren. Was du im zusammenspiel mit [man]date_create_from_format[/man] und [man]date_create[/man] und deren OOP-Äquivalenten benutzen solltest.
            [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


            • #7
              Das ist natürlich noch sicherer - vielen Dank für den Tipp!

              Kommentar


              • #8
                Naja, die Bibliothek ist tatsächlich so geschrieben, dass bestimmte Muster immer auf eine bestimmte Weise interpretiert werden.

                DD.MM.YYYY oder DD-MM-YYYY
                MM/DD/YYYY
                YYYY-MM-DD

                Zitat von php.net
                Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

                To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.

                Kommentar


                • #9
                  date_create_from_format('d.m.Y', $str) akzeptiert jedoch auch einziffrige Tage und Monate ohne eine Warnung über date_get_last_errors() zu liefern. Die Doku kann auch so interpretiert werden, daß 'd' eine zweiziffrige Angabe erwartet und j eine Angabe ohne Vornull.
                  d and j Day of the month, 2 digits with or without leading zeros 01 to 31 or 1 to 31
                  Bei der Nutzung von d eine Warnung über date_get_last_errors() bei einziffriggen Angaben zu liefern würde Sinn machen.

                  date_create() ist noch 'toleranter', akzeptiert Allesmögliche, auch strings wie "3.May.2014". Das ist Fluch und Segen zugleich.
                  Sofern der Quelle des Datumsstrings nicht zu 100% vertraut werden kann, sollte besser eine Validierung vorab erfolgen.

                  Kommentar

                  Lädt...
                  X