Hola, por aquí nuevamente requiriendo su ayuda.
Necesito imprimir una fecha de esta manera: 11 de junio de 2015, al hacer esto:
$dateTime = new \DateTime(); $year = $dateTime->format('d \d\e F \d\e Y'); echo $year;
Obtengo: 10 de june de 2015, mi pregunta es: ¿como hago para que se muestre la fecha en español?
He buscado por internet y he mirado esto y muchas web indican que hay que usar el setLocale()
, pero si necesito imprimir en más de un lugar la fecha llamar setLocale()
no es muy óptimo. Además si es un sitio multilingual tampoco es óptimo.
¿Cual es la mejor manera para imprimir las fechas en español usando la clase DateTime?
Gracias.
Respuestas
No entiendo bien tu pregunta, ¿Te refieres a para mostrarla por pantalla? Si es así, sería en TWIG (que es el motor de plantillas de Symfony) sería asi:
{{ fecha | date ('d/m/y H:i:s') }}
@TsubasaAkai
Hola, para mostrar fechas en español con Twig tienes que usar la extensión Intl de twig. Instálala desde composer con:
$ composer require twig/extensions
Luego las muestras con:
{{ post.published_at|localizeddate('medium', 'none', locale) }}
@SakyaStelios
La forma óptima de hacerlo sería lo que te dice @SakyaStelios usando la extensión Intl de Twig. Si te fijas por ejemplo en esta página, que está hecha con Symfony, debajo de tu nombre pone la fecha en español del momento en el que creaste esta discusión. El código Twig que se ejecuta para ello es el siguiente:
{{ discussion.createdAt|localizeddate('long', 'none', 'es') }}
El primer parámetro es el formato de la fecha, el segundo es el formato de la hora y el tercero es el idioma en el que quieres mostrar la información. En esta página del manual de PHP puedes ver todos los formatos disponibles.
@javiereguiluz
Gracias a todos por sus respuestas.
En Twig ya lo habia solucionado de esa manera, pero necesito hacerlo tambien en PHP, para imprimir en reportes PDF.
Gracias.
@ramiroanacona
Entonces la solución consiste en mirar el código fuente del filtro localizeddate
de Twig:
function twig_localized_date_filter(Twig_Environment $env, $date, $dateFormat = 'medium', $timeFormat = 'medium', $locale = null, $timezone = null, $format = null) { $date = twig_date_converter($env, $date, $timezone); $formatValues = array( 'none' => IntlDateFormatter::NONE, 'short' => IntlDateFormatter::SHORT, 'medium' => IntlDateFormatter::MEDIUM, 'long' => IntlDateFormatter::LONG, 'full' => IntlDateFormatter::FULL, ); $formatter = IntlDateFormatter::create( $locale, $formatValues[$dateFormat], $formatValues[$timeFormat], $date->getTimezone()->getName(), IntlDateFormatter::GREGORIAN, $format ); return $formatter->format($date->getTimestamp()); }
La función twig_date_converter()
simplemente convierte la fecha en un objeto de tipo DateTime
.
@javiereguiluz
Hola @javiereguiluz, a respuesta de tu comentario te cuento:
Encontre algunas librerias PHP que se encargan de mostrar fechas en diferentes idiomas.
Finalmente terminé usando Sonata Intl ya que es para Symfony, la primer libreria es buena pero habria que hacer algo más para integrarla o usarla con el Español.
Gracias.
@ramiroanacona
y si lo que quieres es lo contrario... obtener un objeto DateTime de una fecha recibida en español?
se recibe "Lunes26"
al utilizar
$dateString = "Lunes26"; $date = \DateTime::createFromFormat('ld',$dateString);
date es false por que createFromFormat no entiende la string en español
según documentación con esto debería bastar..
setlocale(LC_ALL,"es_ES");
pero al menos dentro de un controlador de symfony 2.3 no funciona, no tiene efecto el setLocale
@DPestanaPerdomo