Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour,
J'aimerais afficher des dates sous la forme jj/mm/aaaa (ex. 07/06/2012) mais sans forcer un format particulier (genre 'dd/MM/yyyy') qui me ferait perdre la localisation (mes visiteurs anglais auraient aussi la date 07/06/2012, ce qui les perturberaient).
Ce qui existe de plus proche est le format fourni par la constante Zend_Date::DATE_SHORT mais d'après les fichiers LDML/XML de Zend_Locale_Data, l'année est retournée sous 2 chiffres... (exemple avec le fr.xml)
[lang=xml] <dateFormatLength type="short"> <dateFormat> <pattern>dd/MM/yyyy</pattern> </dateFormat> </dateFormatLength>
Il n'existe apparemment pas de moyen de surcharger/fournir un fichier LDML modifié à Zend et je voudrais éviter de devoir modifier les LDML du framework...
Dernière modification par CDuv (30-11-2013 00:15:50)
Hors ligne
Bonjour CDuv,
je me retrouve dans la méme situation,
est se que vous avez trouvé une solution à ce probléme?
moi j'envisage de créer ma propre constante Date qui fait le méme effet que DATE_SHORT mais avec 4 chiffres pr l'année et la mettre ds website/models/projects/Date.php
en récupérant la local de zend et en retournant le format correspondant
mais pr l'instant c pas encore gagné
si vous avez trouvé une solution depuis 2012 je suis preneuse
merci d'avance.
Hors ligne
En effet, j'ai finalement utilisé une constante maison créée comme suit :
[lang=php] /** Test and correct Zend_Date::DATE_SHORT format **/ $localeDataDateFormats = Zend_Locale_Data::getList(Zend_Locale::findLocale(), 'date'); // Date formats for auto Locale (@see Zend_Locale::findLocale()) $longYearFormat = $localeDataDateFormats['short']; if (substr_count($longYearFormat, 'yy') < 2) { // Not enough "yy" $longYearFormat = str_replace('yy', 'yyyy', $longYearFormat); //TODO: Improve so that it also works with only one or three "y" } define('DATE_SHORT_LONGYEAR', $longYearFormat); // Define our new format, should now use it instead of Zend_Date::DATE_SHORT /** /Test and correct Zend_Date::DATE_SHORT format **/
Et j'utilise désormais la constante DATE_SHORT_LONGYEAR dans mes Zend_Date.
Dernière modification par CDuv (25-11-2013 11:14:48)
Hors ligne
Merci bcp pr ton retour CDuv,
j'ai quandméme quelques questions par rapport à votre solution
voilà j'ai essayer de mettre votre code ds mon propre fichier website/models/projects/Date.php comme ceci:
<?php //
class Project_Date
{
public function __construct()
{
$loaleDataDateFormats = Zend_Locale_Data::getList(Zend_Locale::findLocale(), 'date');
$longYearFormat = $localeDataDateFormats['short'];
if (substr_count($longYearFormat, 'yy') < 2) {
$longYearFormat = str_replace('yy', 'yyyy', $longYearFormat);
}
define('DATE_SHORT_LONGYEAR', $longYearFormat);
}
}
Et je l'appelle depuis ma vue comme ceci:
<?php
$date = Zend_Date::now();
$langue = 'en';
echo $date->toString(Project_Date::DATE_SHORT_LONGYEAR, $langue).'<br>';
$langue = 'fr';
echo $date->toString(Project_Date::DATE_SHORT_LONGYEAR, $langue).'<br>';
$langue = 'es';
echo $date->toString(Project_Date::DATE_SHORT_LONGYEAR, $langue).'<br>';
$langue = 'sv';
echo $date->toString(Project_Date::DATE_SHORT_LONGYEAR, $langue).'<br>';
mais ça me donne l'erreur suivante Undefined class constant 'DATE_SHORT_LONGYEAR'
est se que ça vous di quelque chose cette erreur ou pas du tout ?
Merci .
Hors ligne
En effet ma solution ne modifie pas de Zend_Date : j'utilise une constante globale (c'est ce que fait define()).
Remplacez vos paramètres de format Project_Date::DATE_SHORT_LONGYEAR par DATE_SHORT_LONGYEAR ainsi :
[lang=php] echo $date->toString(DATE_SHORT_LONGYEAR, $langue).'<br>';
Hors ligne
Je vous remercie pr votre réponse CDuv
mon problème est résolu.
Hors ligne
Pages: 1