DateTime::createFromFormat und das 'Y'

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

  • DateTime::createFromFormat und das 'Y'

    Hallo zusammen

    Ich habe folgendes Problem: Ich möchte mit einem DateTime object ein Datum parsen. Dazu setze ich das Muster: "d.m.Y" (Das Jahr muss also 4-stellig sein!). Wenn ich nun aber ein Datum wie "03.02.2" mitgebe und danach die Errors anschaue, akzeptiert die Methode das in aller Ruhe:

    PHP-Code:
    $dateTime DateTime::createFromFormat('d.m.Y''03.02.2');
                
    var_dump($dateTime,$dateTime->getLastErrors()); 
    Das Resultat:

    Code:
    object(DateTime)#92 (3) { ["date"]=> string(19) "2012-03-09 08:41:59" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Zurich" } 
    
    array(4) { ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } }
    Die Frage ist nun: Wieso?
    Zuletzt geändert von pascal007; 09.03.2012, 08:53.

  • #2
    Die Funktion ersetzt keine Validierung.

    Kommentar


    • #3
      Zitat von h3ll Beitrag anzeigen
      Die Funktion ersetzt keine Validierung.
      Worauf basiert diese Annahme? Kennst du etwa fehlerhafte Eingabewerte, die die Funktion nicht korrekt erkennt?

      Ein (lediglich) kurzer Check zeigte, dass DateTime::createFromFormat() falsche aber "korrigierbare" Eingaben in valide Daten umwandelt und diese mit entsprechender Warnmeldung in ->getLastErrors() kennzeichnet. Nicht-übersetzbare Eingaben quittiert die Funktion mit der Rückgabe von FALSE.

      Zitat von pascal007 Beitrag anzeigen
      Hallo zusammen

      Ich habe folgendes Problem: Ich möchte mit einem DateTime object ein Datum parsen. Dazu setze ich das Muster: "d.m.Y" (Das Jahr muss also 4-stellig sein!). Wenn ich nun aber ein Datum wie "03.02.2" mitgebe und danach die Errors anschaue, akzeptiert die Methode das in aller Ruhe:

      PHP-Code:
      $dateTime DateTime::createFromFormat('d.m.Y''03.02.2');
                  
      var_dump($dateTime,$dateTime->getLastErrors()); 
      Das Resultat:

      Code:
      object(DateTime)#92 (3) { ["date"]=> string(19) "2012-03-09 08:41:59" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/Zurich" } 
      
      array(4) { ["warning_count"]=> int(0) ["warnings"]=> array(0) { } ["error_count"]=> int(0) ["errors"]=> array(0) { } }
      Die Frage ist nun: Wieso?
      Keine Ahnung. Bei mir erzeugt dein Quellcode das "korrekte" Ergebnis:
      Code:
      object(DateTime)#1 (3) {
        ["date"] => string(19) "0002-02-03 22:37:55"
        ["timezone_type"] => int(3)
        ["timezone"] => string(3) "UTC"
      }
      Da die Eingabe aber offensichtlich nicht dem Format-Template entspricht, hätte ich die Rückgabe von FALSE erwartet.
      Zuletzt geändert von fireweasel; 11.03.2012, 00:15.
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar

      Lädt...
      X