2012-01-05 18 views
45

Tengo un objeto DateTime la que estoy actualmente formatear travésobjeto de formato DateTime, respetando Locale :: getDefault()

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

Lo que me da exactamente el formato que necesito:

mar 5.3 .2012

El único punto que falta es el idioma correcto. Necesito la traducción al alemán de Tue (Tuesday), que es Die (Dienstag).

Esto me da el ajuste

Locale::getDefault() 

locale correcto Pero no sé cómo decirle DateTime::format usarlo.

no hay una manera de hacer algo como:

$mytime->format("D d.m.Y", \Locale::getDefault()); 
+0

cuídate: strftime ("% a% e.% L.% Y", \ Locale :: getDefault()) no funciona (al menos aquí en mi configuración), ya que getDefault() devuelve "de" en lugar de "de_DE" ... – stoefln

+1

El segundo parámetro de strftime debe ser la marca de tiempo, no una configuración regional. – Jonathan

+0

Oh, lo siento. Completamente claro que esto no funciona. Lo que realmente quería decir es que setlocale (LC_TIME, \ Locale :: getDefault()) no funciona (en mi aplicación symfony2) – stoefln

Respuesta

48

Eso es porque format no prestar atención a la configuración regional. Debería usar strftime en su lugar.

Por ejemplo:

setlocale(LC_TIME, "de_DE"); //only necessary if the locale isn't already set 
$formatted_time = strftime("%a %e.%l.%Y", $mytime->getTimestamp()) 
+8

Este comportamiento se menciona en los documentos php en [DateTime :: format] (http: // www.php.net/manual/en/datetime.format.php): * 'Este método no usa configuraciones regionales. Todos los resultados están en inglés. * * – rdlowrey

+20

strftime() no funciona con fechas anteriores a 1970, Date_time :: format() no funciona con configuraciones regionales ... ¿hay algo que funcione con ambos? –

+1

@Jay K: Siempre es posible extender la clase DateTime nativa de PHP para agregarle localización. – Duroth

81

Puede utilizar la extensión Intl para dar formato a la fecha. Formateará las fechas/horas de acuerdo con la configuración regional elegida, o puede anular eso con IntlDateFormatter::setPattern().

Puede parecer un rápido ejemplo de uso de un patrón personalizado para el formato de salida deseado.

$dt = new DateTime; 

$formatter = new IntlDateFormatter('de_DE', IntlDateFormatter::SHORT, IntlDateFormatter::SHORT); 
$formatter->setPattern('E d.M.yyyy'); 

echo $formatter->format($dt); 

Que da como resultado lo siguiente (para hoy, al menos).

Di. 4.6.2013


Editar: Ahh Boo! Respondió una pregunta antigua porque ¡algunos comentarios lo subieron a la lista! Al menos la opción Intl se menciona ahora.

+0

es bueno que haya respondido a una pregunta antigua, porque esta pregunta aparece en la parte superior de los resultados de búsqueda de Google y solo se utiliza para proporcionar información desactualizada. –

+0

Además, obtiene la insignia "Nigromante" cuando responde (con éxito) a una pregunta anterior. – aesede

+0

Y debe actualizarse como la respuesta correcta – Celoain