Subtilité de Zend_Date

Je viens de tomber sur un méchant bogue dans mon application. Il est du à une subtilité dans les formats ISO proposés par Zend_Date.

Le problème se situe au niveau des années. Zend_Date propose deux formats différents : yyyy et YYYY. Le premier, celui avec les y en minuscules fournit le résultat auquel on peut s'attendre, alors que le deuxième renvoie l'année dans lequel se situe la semaine !

Si je prends l'exemple du dimanche 3 janvier 2010, YYYY-MM-dd renvoie 2009-01-03 au lieu du 2010-01-03 auquel on pourrait s'attendre, car ce jour fait partie de la semaine 53 de l'année 2009. Comme quoi il faut bien lire la doc :

For year there are two specifiers available which are often mistaken. The Y specifier for the ISO year and the y specifier for the real year. The difference is small but significant. Y calculates the ISO year, which is often used for calendar formats. See for example the 31. December 2007. The real year is 2007, but it is the first day of the first week in the week 1 of the year 2008. So, if you are using 'dd.MM.yyyy' you will get '31.December.2007' but if you use 'dd.MM.YYYY' you will get '31.December.2008'. As you see this is no bug but a expected behaviour depending on the used specifiers.

Une consolation, je ne suis pas le seul à m'y être fait prendre, puisqu'un rapport de bogue a déjà été ouvert : http://framework.zend.com/issues/browse/ZF-8277

A bon entendeur...

Portrait de Bertrand AGIER

Bonjour, Cette subtilité

Bonjour,

Cette subtilité méritait d'être mise en avant. Merci !
Faut-il en conséquence corriger le billet "Localiser un champ date"

class Wiip_Date extends Zend_Date
{
const MYSQL_DATE = 'YYYY-MM-dd';
const MYSQL_DATETIME = 'YYYY-MM-dd HH:mm:ss';
}

??

Portrait de Maxence

Tout à fait. Je m'y attaque

Tout à fait. Je m'y attaque dès maintenant.

Portrait de moosh

Dans le même style pour

Portrait de mikaelkael

En fait ce n'est pas la

En fait ce n'est pas la première issue sur le sujet. Elles arrivent par vague tous les ans à cette période de l'année quand les développeurs/utilisateurs voient le 1er janvier apparaître. Et justement avant-hier, c'est ce qui m'est arrivé ;)

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.