Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> DateTime::createFromFormat jako walidacja daty
grrizli
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 6
Dołączył: 29.08.2009

Ostrzeżenie: (0%)
-----


Witam wszystkich!
Spotkałem się w Internecie z używaniem DateTime::createFromFormat do sprawdzania poprawnosci dat. Czy ktoś jest w stanie stwierdzić czy to się do tego nadaje? Jak to się ma do problemu który napotkałem poniżej? Czy pozostaje jedynie checkdate()?
Zapragnalem walidować datę przy użyciu: DateTime::createFromFormat i weryfikacji czy wynik jest obiektem, dla ilustracji kod:
  1. $date = DateTime::createFromFormat('Y-m-d', '2013-13-13');
  2. if (!is_object($date))
  3. throw new Exception('data niezgodna ze wzorcem');
  4. var_dump($date);


Postarałem się wyłuskać problem w najczystszej postaci, a następnie wynik var_dumpa (chyba nie musze dodawac, ze wyjątku nie rzuca).
Kod
object(DateTime)#14 (3) {
  ["date"]=>
  string(19) "2014-01-13 19:21:11"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Warsaw"
}



być może ma to jakieś znaczenie
Kod
PHP 5.3.3-7+squeeze14
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


IMO raczej powinieneś pozostać przy checkdate. To, że zapis 2013-13-13 może zostać w pewnych przypadkach zostać zinterpretowany jako jakaś data, nie oznacza, że jest to prawidłowa data.

Poniżej masz przykłady walidatorów dat z dwóch największych PHP'owych FW:
1. Symfony2: https://github.com/symfony/symfony/blob/mas...teValidator.php
2. ZendFramework2: https://github.com/zendframework/zf2/blob/m...or/Date.php#L98

Jak widzisz ZF2 również korzysta z DateTime::createFromFormat() jednak sprawdzają czy DateTime nie zwróciło jakiegoś ostrzeżenia dot. błędnej daty. Wg mnie pierwsze rozwiązanie jest nieco zgrabniejsze, bo:
1. Kod jest zdecydowanie prostszy.
2. Zakłada, że podana data będzie w formacie YYYY-MM-DD, a to już samo w sobie wymusza to Tobie trzymanie się jednego określonego formatu przy przesyle/przetwarzaniu danych.

Ten post edytował Crozin 11.02.2013, 19:58:29
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 25.12.2025 - 05:49