Ankündigung

Einklappen
Keine Ankündigung bisher.

Deutsches Datum in englisches Datum konvertieren

Einklappen

Neue Werbung 2019

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

  • Deutsches Datum in englisches Datum konvertieren

    Hallo,

    ich muss ein deutsches Datum in ein englisches Datum konvertieren.

    'Freitag, 22. Feb 2019' ---> YYYY-MM-DD

    Kann mir jemand schreiben, wie ich das am besten mache?


    Mit freundlichen Grüßen,

    John Harper

  • #2
    Bitteschön:
    PHP-Code:
    <?php
    // internationales Datum lesen
    $fmt = new IntlDateFormatter(
        
    'de_DE',
        
    IntlDateFormatter::FULL,
        
    IntlDateFormatter::NONE,
        
    'Europe/Berlin',
        
    IntlDateFormatter::GREGORIAN
    );

    $ts $fmt->parse('Freitag, 22. Feb 2019');

    // Format erzeugen
    $fmt->setPattern('yyyy-MM-dd');
    // ISO Datum ausgeben
    echo 'Datum im ISO-Format lautet: ' .$fmt->format($ts)
    ?>
    erzeugt folgende Ausgabe
    Datum im ISO-Format lautet: 2019-02-22

    Kommentar


    • #3
      protestix : Hast du die Lösung getestet?

      Kommentar


      • #4
        Ja, habe ich, schau auch unter https://3v4l.org/A3Hnv

        Du darfst nur das Eingabeformat nicht ändern, sonst muss du das anpassen, ähnlich einer Maske..

        Kommentar


        • #5
          Der IntlDateFormatter hat scheinbar noch ein Problem mit den Kurznamen für März ( Mrz oder Mär.). Bei einigen PHP-Versionen betrifft es noch mehr Monate.

          Kommentar


          • #6
            Kurzschreibweisen werden nur so erkannt wie sie in der Icu Datei stehen. Mrz ist auch keine geläufige Kurzform lt. ICU. Wenn du zudem long verwendest wird die Kurzschreibweise nie erkannt. Ich habe was die Erkennung anbelangt auch noch nicht alles ausgetestet.
            http://www.icu-project.org/apiref/ic...t.html#details

            Kommentar


            • #7
              Sicher, dass es an der Kurzschreibweise und nicht am 'ä', also der Zeichenkodierung liegt?

              Kommentar


              • #8
                Das mit den Umlauten funktioniert. folgendes Datum wurde bei mir richtig erkannt
                'Montag, 01. Mär 1999',

                Kommentar


                • #9
                  Also ich bekomme mit diesen Code folg. Ergebnis
                  PHP-Code:
                  $strDate 'Montag, 11. Feb 2019';
                  $fmt = new IntlDateFormatter(
                      
                  'de_DE',
                      
                  IntlDateFormatter::FULL,
                      
                  IntlDateFormatter::NONE,
                      
                  'Europe/Berlin',
                      
                  IntlDateFormatter::GREGORIAN
                  );

                  $ts $fmt->parse($strDate);
                  var_dump(PHP_VERSION,$strDate,$ts,$fmt->getErrorMessage()); 
                  string(6) "7.2.13" string(20) "Montag, 11. Feb 2019" bool(false) string(34) "Date parsing failed: U_PARSE_ERROR"

                  Das unter 3v4l.org liefert für ts einen int Zeitstempel, also Ok.

                  string(5) "7.3.2" string(20) "Montag, 11. Feb 2019" int(1549839600) string(12) "U_ZERO_ERROR"

                  Das Beispiel mit März liefert dagegen:
                  string(5) "7.3.2" string(21) "Montag, 01. Mär 1999" bool(false) string(34) "Date parsing failed: U_PARSE_ERROR"

                  Sieht für mich so aus als wäre das mit dem IntlDateFormatter betreff. parsen von Input noch nicht so ganz ausgereift.

                  Kommentar


                  • #10
                    Ich beschreibe hier mal so wie ich das aktuell gelöst habe in Worten.

                    Der input wie 'Montag, 11. Feb 2019' wird mittels preg_match zerlegt. Der Wochentag wird ignoriert, da redundant.
                    Der Monatsbezeichner wird über ein Hilfsarray ins Englische übersetzt. Also "Mär" => "Mar".
                    Tag, Monat und Jahr werden zu einen String verkettet und mit new DateTime wird ein Datumsobjekt erzeugt.

                    Kommentar


                    • #11
                      Bei der Version bei der es bei dir nicht läuft, kannst du da mal bitte mit PHPinfo auslesen was unter intl steht.
                      Also Version usw.
                      Welche Server Version usw. hast du?

                      Für bplaced habe ich das mal hochgeladen und das kannst du dir hier ansehen und vergleichen
                      http://mhdwr.bplaced.net/phpinfo.php

                      Kommentar


                      • #12
                        Du hast wohl eine neuere ICU-Version, und das unter PHP 5.6. Bei mir
                        ICU version 50.1
                        ICU Data version 50.1
                        PHP Version 7.2.13 (linux, 64 Bit).

                        Kommentar


                        • #13
                          Es funktioniert bei mir ab PHP 5.4 aber Windows auch unter intl

                          version 1.1.0
                          ICU version 49.1.2
                          ICU Data version 49.1.2

                          Kommentar


                          • #14
                            Belassen wir es dabei, hab da womöglich eine Montags-Version erwischt. Das hier ist der selbe Server. Nehme ich "nur" zum Testen.

                            Kommentar


                            • #15
                              YYYY-MM-DD
                              habe ich bei Engländern noch nie gesehen. Die schreiben eher sowas wie 14/3/2019.
                              [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                              Kommentar

                              Lädt...
                              X