Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Fechas en español usando la clase DateTime de PHP en Symfony2

11 de junio de 2015

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

#1

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') }}

Aquí tienes más información

@TsubasaAkai

12 junio 2015, 2:29
#2

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

12 junio 2015, 5:05
#3

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

12 junio 2015, 8:31
#4

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

12 junio 2015, 15:41
#5

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

12 junio 2015, 15:44
#6

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

4 agosto 2015, 18:24
#7

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

22 octubre 2017, 8:28