2012-02-13 29 views
7

¿Alguien me puede decir cómo cambiar el formato de fecha de configuración regional en Symfony2?cambiar la configuración regional de la fecha

no importa lo que se propuso en config (framework.session.default_locale), esto siempre devuelve días de la semana en Inglés (que iba a necesitar el día de la semana en alemán):

$start->format("D d.m.Y"); 

cuando la salida de la localidad por defecto siempre returnes "de" por cierto, no importa lo que la configuración en el config.yml

echo \Locale::getDefault() 

INFO ADICIONALES:

Quiero ser capaz de dar formato a la fecha de una manera que se se emite correctamente (es decir, con días de semana alemanes correctos) en mi sistema local Y en el servidor activo. Intenté esto con strftime, que usa las configuraciones regionales instaladas del sistema y tenía problemas reales con él, ya que los paquetes locales tienen diferentes esquemas de nombres en las máquinas en vivo y dev. Hay otra pregunta SO al respecto aquí: PHP: why is my date formated on the server differently?

+0

Ver http://stackoverflow.com/a/23424315/1001110 –

Respuesta

3

utilicé dicho código para formatear fechas en mi proyecto (se necesita para encender extensión intl para php):

<?php 
    class DefaultController extends Controller { 
     public function indexAction() { 
      $date = new \DateTime("now"); 
      $formatter = new \IntlDateFormatter(\Locale::getDefault(), \IntlDateFormatter::NONE, \IntlDateFormatter::NONE); 
      $formatter->setPattern("EEEE Y-M-d"); 
      return array('locale' => \Locale::getDefault(), "intl" => $formatter->format($date)); 
    } 

Y funciona bien para mí. Cómo crear golpeteo de formato se pueden encontrar en http://userguide.icu-project.org/formatparse/datetime

pero no me encontré con un ayudante para la rama, para que pueda crear su propia

8

Symfony2 no proporciona ningún formateador de fecha en su núcleo.

Todo lo que hace es configurar el valor \Locale::getDefault() olfateando sesión y solicitud.

Debe proporcionar algunos servicios adicionales para manejar por formato de configuración regional, como SonataIntlBundle.

Este paquete agrega algunos filtros de rama en una extensión y proporciona algunos ayudantes que se pueden usar en cualquier lugar.

Una vez activado, puede utilizarlos en sus plantillas, por ejemplo:

{{ my_date|format_datetime }} 

Más informaciones aquí: https://github.com/sonata-project/SonataIntlBundle/blob/master/Resources/doc/reference/datetime.rst

+2

Gracias por señalar que no hay Funcionalidad Symfony-out-of-the-box para esto. Pero tiene que haber alguna forma de hacerlo funcionar usando Intl. Miré el código de SonataIntlBundle, pero no lo entiendo. Me siento como en marzo ... ¿realmente soy la única persona que tiene este problema? – stoefln

+0

Muchas cosas de sonata pueden hacerte pensar que estás en Marte :) Pero muchas partes del código relacionado con Symfony son así :) Por supuesto, podrías simplemente usar clases de Intl * directamente, y configurarlas usando $ session-> getLocale() o lo que sea. – Florian

+0

Ahora lo tengo, me faltaba algo de información valiosa: la configuración regional de los usuarios se establece al iniciar sesión, por lo que cambiar la configuración no tiene ningún efecto hasta que el usuario se desconecta y vuelve a iniciar sesión. ¡Gracias! – stoefln

1

Una forma más sencilla es la de almacenar los formatos de los archivos de traducción, de esta manera:

en el archivo "mensajes en .yml.":.

date.format: m/d/Y 
time.format: g:i A 

En los "mensajes fr .yml archivo":

date.format: d/m/Y 
time.format: H:i 

Luego, en un archivo ramita, usted puede hacer esto:

{{ my_date|date('date.format'|trans) }} 

modo que la fecha será automáticamente en el formato correcto, usando la localización actual.

+0

Esta es la forma más fácil de OMI. Y le da la posibilidad de definir formatos como largo, corto, etc. y simplemente usarlos sin ningún paquete adicional. –

+0

El único problema aquí es que los nombres de días y meses no se traducen. –

2

sólo tiene que añadir la extensión ramita en su config.yml

services: 
    twig.extension.intl: 
     class: Twig_Extensions_Extension_Intl 
     tags: 
      - { name: twig.extension } 

En su plantilla ramita Sintaxis: {{myDate | localizeddate ('sizeDate', 'sizeHour', 'locale'}} myDate: debe ser un objeto DateTime sizeDate: puede ser none/short/medium/long/full sizeHour: puede ser none/short/medium/long/completa local: opcional por defecto el idioma de la sesión será el uso pero puede forzar un valor local diversa

{{ myDate | localizeddate('full', 'none') }} ({{ myDate | localizeddate('none', 'short') }}) 
<!-- 
locale "fr" : vendredi 21 décembre 2012 (13:37) 
locale "en : Friday, December 21, 2012 (13:37 PM) 
--> 

Si se produce un error "Instala la extensión 'Intl' para las capacidades de localización completos"

instalar el paquete php5-intl por ej. En el servidor Debian the co mmand será: apt-get install php5-Intl

No se olvide de borrar la memoria caché;)

Cuestiones relacionadas