Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 19-05-2008 12:01:35

plop
Nouveau membre
Date d'inscription: 19-05-2008
Messages: 1

[Zend_Format et Zend_Date][1.5.1] Problème avec le format 'c'

Bonjour, je viens de trouver un bug :

Quand j'instancie une date de la façon suivante :

Code:

Zend_Date::setOptions(array('format_type' => 'php'));
$orig     = 'c';  
$date   = date('Y-m-dTH:i:s').'+00:00';
$date = new Zend_Date($date, $orig);

La méthode _calculate de zend_date transforme le $part ('c') via:

Code:

$part = Zend_Locale_Format::convertPhpToIsoFormat($part);

et $part deviens : 'yyyy-MM-ddTHH:mm:ssZZZZ'

Le problème vient après quand ce $part est analysé dans Zend_Locale_Format::_parseDate  via Zend_Locale_Format::getDate.

Je cite le début du code de _parseDate :

Code:

        $options = array_merge(self::$_Options, self::checkOptions($options));
        $test = array('h', 'H', 'm', 's', 'y', 'Y', 'M', 'd', 'D', 'E', 'S', 'l', 'B', 'I',
                       'X', 'r', 'U', 'G', 'w', 'e', 'a', 'A', 'Z', 'z', 'v');

        $format = $options['date_format'];
        foreach (str_split($format) as $splitted) {
            if ((!in_array($splitted, $test)) and (ctype_alpha($splitted))) {
                require_once 'Zend/Locale/Exception.php';
                throw new Zend_Locale_Exception("Unable to parse the date format string '" . $format
                                              . "' at letter '$splitted'");
            }
         }

En gros il analyse chaque lettre de $part et si c'est une lettre de l'alphabet (ie on ignore les - _ etc...) et qu'elle n'existe pas dans le tableau $test alors ca génère une exception.
Et c'est bien le problème du format 'c' ou ISO_8601 qui vaut ....T.... --> le T ne passe pas.

Bizarrement je n'ai pas le pb si je met :

Code:

Zend_Date::setOptions(array('format_type' => 'php'));
$orig     = ISO_8601;  
$date   = date('Y-m-dTH:i:s').'+00:00';
$date = new Zend_Date($date, $orig);

je suppose qu'il ne passe pas alors dans la fonction qui déconne.

Bref voila un bug, faîtes en ce que vous voulez, je n'ai pas testé de rajouter la lettre T dans le tableau test car même si ca règle le pb je ne veux pas corriger le framework tant que j'ai une solution de secours (utiliser la constante Zend_Date::ISO_8601)

Dès fois que quelqu'un me demande pourquoi je voulais utiliser 'c' (format de date php) et pas les formats de dates ISO_9601 (cf http://framework.zend.com/manual/en/zen … nedformats)

C'est parce que c'est pratique de gérer les dates avec les mêmes codes que lorsqu'on utilise date().

Enjoy

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages