Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
Je souhaiterai utiliser la classe Zend_Validate_Date pour mes dates, cependant j'ai remarqué que le format pris en compte est YYYY-MM-DD.
Or je souhaiterai utiliser un autre format (en l'occurence DD/MM/YYYY).
Existe-t-il un élément/classe propre à Zend pour effectuer le changement de format ? Est-ce prévu de gérer différent format dans un version ultérieur ? Ou faut-il recréer une classe ou faire un formattage main ?
Merci,
Kévin D.
Hors ligne
Bonjour KevinD,
Zend_Validate_Date ne prend en compte qu'un seul format pour l'instant. Par contre, tu peux facilement le sous-classer, changer le format de la date et appeler la fonction initiale. Un truc du genre (non testé)
class Kitpages_Validate_Date extends Zend_Validate_Date { public function isValid($value) { list($jour,$mois,$an) = explode("/",$value); return parent::isValid("$an-$mois-$jour"); } }
A+, Philippe
Hors ligne
Hello,
C'est bien ce que je pensai :p
Je ne me suis pas embété, j'ai repris le code de la classe et l'ai modifié :
class MyLib_Validate_Date implements Zend_Validate_Interface { protected $_messages = array(); public function isValid($value) { $this->_messages = array(); $valueString = (string) $value; if (!preg_match('#\d{4}/\d{2}/\d{2}#', $valueString)) { $this->_messages[] = 'Le format de la date doit être JJ/MM/AAAA.'; return false; } list($year, $month, $day) = sscanf($valueString, '%d/%d/%d'); if (!checkdate($month, $day, $year)) { $this->_messages[] = 'La date est incorrecte.'; return false; } return true; } public function getMessages() { return $this->_messages; } }
Sinon, peux-t-on espérer l'arrivé du support des différents formats de dates dans une prochaine version ? Un peu comme le fait Zend_Validate_Float ?
Kevin D.
Hors ligne
Tout ce que je peux dire c'est qu'il n'y a pas de "Feature request" (demande d'évolution) dans le suivi de bug. Je ne suis pas certain que ça soit à l'ordre du jour du multiplier les validateurs. La voie standard semble être de sous classer les fonctions de base pour créer des fonctions plus évoluées. L'idée est de garder les fonctions de base simples.
Hors ligne
Mais dans l'esprit i18n, le framework devrait pourvoir valider différents formats de date. Sinon moi j'vais en chier avec mon site en 15 langues... Doit y avoir moyen de paramétrer cela en fonction de la locale...
Hors ligne
Que dire... bon courage ?
Sinon tu peux aussi combiner Zend_Date et Zend_Validate_Date avec un truc du genre (tjrs non testé) :
class Kitpages_Validate_Date extends Zend_Validate_Date { public function isValid($value) { $date = new Zend_Date($value, Zend_Date::DATES, $myLocale); return parent::isValid($date->toString('Y-m-d')); } }
va voir l'URL http://framework.zend.com/manual/en/zen … tants.html pour voir quel format d'entrée tu peux utiliser (ces formats sont localisés en fonction de $myLocale), sur cet exemple, le format d'entrée est un peu foireux... (c'est le Zend_Date::DATES que tu devras changer).
A+, Philippe
Hors ligne
Bonjour,
je fais remonter ce post afin de savoir si d'autres solutions ont été mises en place depuis.
Je cherche a faire un truc dans ce genre :
$dateNaissance= new Zend_Form_Element_text("dateNaissance"); $dateNaissance->setLabel("Date de naissance"); $validatorNotEmptyDateNaissance = new Zend_Validate_Date('d/m/y',null); $dateNaissance->addValidator($validatorNotEmptyDateNaissance);
La vérification du format ne se fait pas correctement.
Comment gérez vous les validator de date dans vos formes ?
Hors ligne
Salut
Zend_Validate_Date utilise Zend_date pour faire la validation il faut donc utiliser le format 'DD/MM/YYYY' pour que ça fonctionne correctement :
new Zend_Validate_Date('DD/MM/YYY',null);
Dernière modification par 2mx (24-04-2008 16:16:26)
Hors ligne
Ba oui, ca fonctionne.
Merci
(j'aurais pu m'en douter...pour ma défense,c'était du vieux code qui datait de la 1.5rc, et "DD/MM/YYYY" ne fonctionnait pas à l'époque)
Dernière modification par bertra (24-04-2008 16:26:32)
Hors ligne
exemple :
$birthdate = new Zend_Form_Element_Text('birthdate');
$birthdate->setLabel('Date de naissance (jj/mm/aaaa):');
$birthdate->addValidator(new Zend_Validate_Date('dd/mm/YYYY'));
Hors ligne
Ba non...je comprend pas.
Je peux toujours saisir des dates ayant des formats différents (ddmmyy par exemple).
Ca vient de chez moi ou quoi ?
Hors ligne
Non, berta, je viens de tester le code que je t'ai montré,
il accepte 31/31/31
Et il ne convertit meme pas 31 en 1931, car dans ma base de donnée mysql, le champ date renvoi ca :
0044-07-31
Hors ligne
c'est facheux ca ... je fais comment moi pour valider mes dates ? En sachant que tous mes controles de formulaires utilisent les validator
Hors ligne
Perso j'utilise JSCalendar, un script permettant d'afficher un calendrier dans les champs input text. J'y est mis comme attribut à ce input "readonly" de façon que l'utilisateur ne puisse pas la modifier manuellement. Ensuite, je gère la date pour l'insérer au bon format dans MySQL (une fonction que m'a donné l'un d'entre vous
$date = implode('/',array_reverse(explode('/',$date)));
Je suis super satisfait de cette méthode car je n'ai plus besoin de validator Date. Si ça t'interesse, je peux te donner plus de détail.
Dernière modification par whitespirit (29-04-2008 09:08:23)
Hors ligne
Pages: 1