2010-10-13 16 views
5

En una plantilla que mostrar el día y mes de una fecha específica:¿Cómo formatear las fechas según la configuración regional?

<div class="jour"><?php echo date('d',strtotime($content->getCreatedAt())) ?></div> 
<div class="mois"><?php echo date('M',strtotime($content->getCreatedAt())) ?></div> 

Esto funciona bien, el problema es el nombre del mes está en Inglés. ¿Dónde especifico que deseo los nombres de los meses en otra configuración regional, por ejemplo, francés?

+0

Me trataron de ajustar la "default_culture" en el archivo settings.yml, pero eso no cambia nada – Manu

Respuesta

5

Symfony tiene un ayudante format_date entre los Ayudantes de fecha que es i18n-aware. Los formatos están mal documentados, por desgracia, see this link para una pista sobre ellos.

+2

Sí ... Eso sería una manera mucho más agradable ¡hazlo! Sin embargo, dejaré mi respuesta como una solución PHP general. – lonesomeday

+0

¿Puede format_date mostrar el nombre del mes? Parece que no puedo encontrar documentación sobre eso. – Manu

+0

No importa, lo encontré - http://trac.symfony-project.org/wiki/formatDateHowTo – Manu

1

default_culture solo se aplica para el marco de internacionalización de Symfony, no para las funciones nativas de PHP. Si desea cambiar este proyecto de ajuste de ancho, lo haría en config/ProjectConfiguration.class.php, utilizando setlocale, y luego usar strftime en lugar de date:

// config/ProjectConfigration.class.php 
setlocale(LC_TIME, 'fr_FR'); 

// *Success.php 
<div class="jour"><?php echo strftime('%d',strtotime($content->getCreatedAt())) ?></div> 
<div class="mois"><?php echo strftime('%b',strtotime($content->getCreatedAt())) ?></div> 

Tenga en cuenta que esto requiere valores de localización para ser activado en la máquina. Para verificar, haga var_dump(setlocale(LC_ALL, 'fr_FR')); Si el resultado es false, no puede usar setlocale para hacer esto y probablemente necesite escribir el código de traducción usted mismo. Además, deberá tener instalada la configuración regional correcta en su sistema. Para verificar qué configuraciones regionales están instaladas, haga locale -a en la línea de comando.

+0

encontrado personalmente 'strftime% X% x' params muy útil –

1

Perdón por empalmar tan tarde en el día, pero me gustaría agregar mis propios pensamientos aquí. El mejor formato de fecha internacional que he encontrado es "% e% b% Y", p. 9 de marzo de 2012. Encuentro esto mucho más legible que el formato ISO "% Y-% m-% d", p. Ej. 2012-03-09. De acuerdo con los documentos, el formato% x debe ser sensible a la configuración regional, pero no funciona para mí, al menos no en el iPhone. Esto puede deberse a que Safari no está pasando la configuración regional en los encabezados HTML, no lo sé.

0

A veces es útil utilizar una matriz con diferentes valores posibles para setlocale(). Especialmente para soportar diferentes entornos (Windows, Linux, ...)

setlocale(LC_TIME, array('fr', 'fr_FR', 'fr_FR.utf8', 'french', 'french_FRANCE', 'french_FRANCE.utf8')); 
echo strftime("%A %d %B", strtotime(date("Y-m-d"))); 

Como los estados de documentación:

Si locale es una matriz o seguida de parámetros adicionales a continuación, cada elemento de la matriz o parámetro se trató de establecerse como nueva configuración regional hasta el éxito. Esto es útil si se conoce una configuración regional bajo diferentes nombres en diferentes sistemas o para proporcionar una alternativa para una configuración regional posiblemente no disponible.

Cuestiones relacionadas