Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
je me heurte actuellement à un problème curieux concernant le composant Zend_Date.
Après m'être tourné vers ZF Issue Tracker (cf. http://framework.zend.com/issues/browse/ZF-9711), où l'on m'a répondu que ce bug n'est pas reproductible, je me tourne vers la communauté pour que quelqu'un puisse me dire si:
* j'hallucine complètement
* je suis le seul à rencontrer ce problème => je joins un petit code d'exemple complet permettant de reproduire très simplement le problème.
Le problème concerne uniquement les années bissextiles antérieures à 1900, et plus particulièrement pour les jours des mois de février (comme par hasard ...).
Le problème est le suivant:
1. je crée un objet Zend_Date pour la date du 25/02/1824 (année bissextile donc).
$strInitialDate='25/02/1824'; $myDate = new Zend_Date($strInitialDate, 'dd/MM/yyyy');
2. L'objet Zend_Date créé correspond à la date du 26/02/1824. Il y a un décalage de 1 jour !!!!
echo $myDate->toString('yyyy/MM/dd');
produit:
1824/02/26
Je rencontre ce problème avec la version 1.10.1 (mais avec la dernière 1.10.3, c'est la même chose).
Les configurations complètes de mes environnements de dev et de prod sont données dans le post sur ZF Issue Tracker.
Si quelqu'un pouvait avoir la gentillesse de tester ce code, et me dire s'il observe le même résultat.
Merci
Philippe
Voici le code complet:
<?php defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/')); set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/library'), get_include_path()))); require_once 'Zend/Date.php'; date_default_timezone_set('Europe/Paris'); //$datearray = array('year' => 1824, 'month' => 2, 'day' => 25); //$myDate = new Zend_Date($datearray); $strInitialDate='25/02/1824'; $myDate = new Zend_Date($strInitialDate, 'dd/MM/yyyy'); $strFormattedDate= $myDate->toString('yyyy/MM/dd'); echo "Initial date ('dd/MM/yyyy'): ".$strInitialDate; echo "\n"; echo "Formatted date ('yyyy/MM/dd'): ".$strFormattedDate; echo "\n"; ?>
Et le résultat est:
Initial date ('dd/MM/yyyy'): 25/02/1824 Formatted date ('yyyy/MM/dd'): 1824/02/26
Hors ligne
J'obtiens le même résultat !
Hors ligne
Même si ça ne résoud pas mon problème, au moins, je me sens mois seul !!! ;-)
Merci d'avoir pris la peine de tester.
Euh ... mais j'ai un doute tout à coup:
-> tu obtiens le même résultat que moi => donc il y a bien un bug
ou alors c'est
-> ton programme affiche le même résultat, c'est-à-dire deux fois la date du 25/02/1824
A priori, tu obtiens le même résultat (buggué) que moi.
Merci
Hors ligne
Hello,
J'obtenais ton résultat en 1.10.1 mais pas dans le trunk. Je ne sais pas dire pour la 1.10.3.
Thomas a récemment corrigé un bug, je pense que c'est celui-là dont il s'agit : http://framework.zend.com/issues/browse … issuepanel
@+
Hors ligne
Désolé que mon message soit a double sens. Ce que je voulais dire c'était que j'avais le même résultat que toi donc le bug.
De plus j'ai essayé ce matin avec la dernière version (1.10.3) et j'ai aussi le bug (avant j'essayais avec la version 1.10.1).
As-tu essayé directement en PHP dans utiliser Zend ?
Hors ligne
@Ithier : le problème est corrigé dans le trunk mais pas en 1.10.3
Hors ligne
@mikaelkael
Effectivement, le patch 21753 liée à l'issue [ZF-9349] corrige bien mon problème: merci beaucoup.
@Ithier: lors du dev, je n'utilisais pas l'objet Zend_Date: je formatais mes dates en utilisant les fonctions PHP.
Mais en passant en environnement de prod, j'ai découvert que l'environnement 5.1.X n'était pas compilé avec l'option me permettant d'utiliser ces fonctions (CFLAGS=-DEXPERIMENTAL_DATE_SUPPORT=1 je crois ...)
=> en attendant l'upgrade de cet environnement (ce qui est fait désormais), j'ai utilisé Zend_Date
Merci à tous pour votre aide précieuse
Hors ligne
J'ai un problème dans le même genre...
$date = new Zend_Date('2011-01-02', 'YYYY-MM-dd'); echo $date->get('YYYY-MM-dd'); // 2010-01-02
En interne le timestamp est bon, c'est donc la reconversion en sortie qui doit déconner.
Le bug n'existe pas pour toutes les dates par contre, mais je n'ai pas isolé le cas plus précisément.
Je suis en 1.10.4
Hors ligne
Non c'est yyyy en minuscule sinon c'est l'ISO-8601. Car le 2 janvier 2011 appartient à la semaine 52 de l'année 2010.
Hors ligne
En fait je me suis basé sur le tutoriel de Maxence http://wiip.fr/content/zend-framework-l … champ-date et depuis mon implémentation, il a ajouté un détail qui change tout :
Mise à jour du 4/12/09 : remplacé Y par y dans les codes de format de la date (http://wiip.fr/content/subtilit-de-zend-date).
Du coup tout marche nickel.
Merci
Hors ligne