2010-12-08 12 views
1

J'ai un problème avec Zend_Date :: isDate qui retourne vrai même si la valeur ne correspond pas forcément au format donné.

Par exemple:

$time = "12:34:56"; // Time doesn't have AM/PM attached 

if(Zend_Date::isDate($time, 'hh:mm:ss a')) 
    echo "this is true"; 
else 
    echo "this is false"; 

Ceci est toujours vrai, même si le format indique la « une » indiquant qu'il a besoin « Le temps de la journée, localisée » (qui dans mon cas est « AM »/"PM "). Même un temps complètement mis-formaté, comme '12: 12: 34: 56: 56 'sera toujours vrai. Un temps de ': 34: 56' reviendra faux cependant. Est-ce un bug ou est-ce que je manque quelque chose en pensant que le format que je donne est ce qui doit être assorti?

Merci!

Répondre

3

Je ne pense pas que Zend_Date soit construit pour 'appliquer' un format. Il est construit pour répondre "Si je donne Zend_Date cette chaîne, pouvez-vous le pousser dans ce format?" C'est vraiment trompeur.

Dans votre exemple, il est vrai, mais il évalue réellement:

Jan 25, 35 12:00:00 AM 

qui vous n'attendez pas.

Dans votre exemple bogus, il est vrai aussi, il évalue à:

Dec 14, 34 8:56:00 AM (Dec 12, 34 + 56 hours and 56 minutes) 

Pour validate une date, je pense que vous voulez faire est d'utiliser un Zend_Validator ...

$validator = new Zend_Validate_Date(array('format' => 'hh:mm:ss a')); 
    var_dump($validator->isValid("12:34:56 pm")); // true 
    var_dump($validator->isValid("14:34:56 pm")); // false, actually 2pm 
    var_dump($validator->isValid("01:11:11 am")); // true 
    var_dump($validator->isValid("01:11:11 xm")); // true, 24h fallback 
    var_dump($validator->isValid("24:01:01")); // false 
    var_dump($validator->isValid("16:01:01")); // true, 24h fallback 

Si vous lancez d'abord la validation des dates, alors dans Zend_Date vous devriez obtenir les résultats attendus.

+0

Malheureusement, Zend_Validate_Date utilise également Zend_Date, ce qui pose les mêmes problèmes. Voir http://framework.zend.com/issues/browse/ZF-7583 –