Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: DateTime::createFromFormat jako walidacja daty
Forum PHP.pl > Forum > PHP
grrizli
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
Crozin
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.