DateTime::createFromFormat und das 'Y'

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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?
    Last edited by pascal007; 09-03-2012, 07:53.

  • #2
    Die Funktion ersetzt keine Validierung.

    Comment


    • #3
      Originally posted by h3ll View Post
      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.

      Originally posted by pascal007 View Post
      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.
      Last edited by fireweasel; 10-03-2012, 23:15.
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Comment

      Working...
      X