Convertir fechas de PHP a castellano

¡Muy buenas! Escribo esta entrada el último día de este mes. Estuve bastante ocupado trabajando en un par de proyectos, y recién hoy tengo un día completamente libre.

En esta ocasión traigo un tutorial bastante sencillo, donde voy a enseñar como pasar de una fecha hecha con la función date() a un texto en castellano, conteniendo el nombre del día, el número del mismo, el mes y el año.

Para esto se usa este tipo de fechas:

30-04-2016 04:20:00

Que se crean así:

//Se define el timezone que sea necesario
date_default_timezone_set('America/Argentina/Buenos_Aires');

//Dia-Mes-Año Hora:Minutos:Segundos
$fecha = date('d-m-Y H:i:s');

Y obtendremos como resultado:

Sábado 30 de Abril de 2016

Es importante que los separadores de la fecha sean un guión y no una barra (-, no /). Los guiones definen el sistema de formato europeo, mientras que las barras definen que el formato es «americano» (estadounidense).

¿Cómo pasar la fecha a castellano?

Para hacerlo más ameno , crearé una función llamada fechaCastellano, así podremos guardar la función en un archivo y requerirlo en PHP cuando sea necesario. La misma obtendrá un único parámetro, que es el de fecha.

function fechaCastellano ($fecha) {
}

Ahora recortaremos la fecha para obtener los diez primeros caracteres (es decir: 30-04-2016). No importa si la fecha tiene o no la hora, es por si acaso.

function fechaCastellano ($fecha) {
    $fecha = substr($fecha, 0, 10);
}

Después vamos a obtener el número de día, el día (nombre del día), el mes y el año. Esto se hace con la función strtotime().

function fechaCastellano ($fecha) {
  $fecha = substr($fecha, 0, 10);
  $numeroDia = date('d', strtotime($fecha));
  $dia = date('l', strtotime($fecha));
  $mes = date('F', strtotime($fecha));
  $anio = date('Y', strtotime($fecha));
}

Por defecto el día y el mes ($dia, $mes) se obtienen en inglés, así que vamos a pasarlo a castellano/español usando str_replace().

function fechaCastellano ($fecha) {
  $fecha = substr($fecha, 0, 10);
  $numeroDia = date('d', strtotime($fecha));
  $dia = date('l', strtotime($fecha));
  $mes = date('F', strtotime($fecha));
  $anio = date('Y', strtotime($fecha));
  $dias_ES = array("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo");
  $dias_EN = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
  $nombredia = str_replace($dias_EN, $dias_ES, $dia);
  $meses_ES = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
  $meses_EN = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
  $nombreMes = str_replace($meses_EN, $meses_ES, $mes);
}

Lo último sería devolver los datos en una sintaxis clara. En este caso sería así:

function fechaCastellano ($fecha) {
  $fecha = substr($fecha, 0, 10);
  $numeroDia = date('d', strtotime($fecha));
  $dia = date('l', strtotime($fecha));
  $mes = date('F', strtotime($fecha));
  $anio = date('Y', strtotime($fecha));
  $dias_ES = array("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo");
  $dias_EN = array("Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday");
  $nombredia = str_replace($dias_EN, $dias_ES, $dia);
$meses_ES = array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
  $meses_EN = array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
  $nombreMes = str_replace($meses_EN, $meses_ES, $mes);
  return $nombredia." ".$numeroDia." de ".$nombreMes." de ".$anio;
}

Así solo nos quedaría hacer algo así:

<?php
//Incluimos el archivo con la función o simplemente pegamos la función
require('fechaCastellano.php');

//La fecha que queremos pasar a castellano
$miFecha = "30-04-2016 04:20:00";
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Fechas en castellano</title>
</head>

<body>
<p>$miFecha = <?php echo $miFecha; ?></p>
<p>fechaCastellano($miFecha) = <?php echo fechaCastellano($miFecha); ?></p>
</body>
</html>

Y ya tenemos la fecha en español.

Conclusión:

Es una función muy simple pero bastante útil. Recuerda que puedes modificar el return para que se ajuste a tus necesidades.

Espero que el tutorial haya sido de utilidad. Nos leemos, ¡saludos!

10 comentarios

  1. Andre · May 3, 2016

    Muy bueno, muchas gracias.

    Me gusta

  2. Chicharo · noviembre 30, 2017

    excelente tutorial, me sirvió a la perfección. Buena vibra brother!!!

    Me gusta

  3. Jose de Jesus Aguirre · May 24, 2018

    Muchas gracias!!!!

    Me gusta

  4. Gio · junio 26, 2018

    excelente!

    Me gusta

  5. Argenis Mujica · octubre 22, 2018

    Muchas Gracias Excelente

    Me gusta

  6. Jhoan Borges · noviembre 23, 2018

    geniooooooo

    Me gusta

  7. lafat32 · abril 15, 2019

    Me ha servido muchas gracias!

    Me gusta

  8. pattolucas · abril 26, 2019

    Hola excelente!, lo empece a usar ahora, mi pregunta es: Como se haría para usarlo de 2 a 3 veces en la misma página, en mi caso tengo «Noticia anterior» y «Noticia siguiente», más la noticia que se está viendo en ese momento, lo hice cambiando los nombre de la clase, por cada ves que lo quiero usar, pero no se si es la mejor forma

    Me gusta

    • Rocanrol · abril 26, 2019

      Simplemente cambia el parámetro de la función:

      fechaCastellano(«24-04-2019 14:00:33»);
      fechaCastellano(«25-04-2019 09:45:44»);
      fechaCastellano(«26-04-2019 11:00:29»);

      Puedes pasarle variables (como en el ejemplo del post) o strings directamente (como en el ejemplo que te di ahora).

      Me gusta

  9. Lucas · diciembre 5, 2019

    MUY BUENOOO CHEEEE

    Me gusta

Deja un comentario