Mejorando la forma de mostrar fechas con PHP

Beware: This post was published 8 years ago and its content may be outdated.

Nota: Este tutorial requiere conocimientos de Bases de Datos MySQL y de PHP básicos (ambos). No está pensado para recién llegados, sinó para aquellos que se hayan atascado durante la programación de un script que requiera modificar la forma de mostrar las fechas.

Bien, puede que el título de este artículo no sea de los mejores que he escrito (es cierto, realmente no aclara mucho), pero es que este tutorial tampoco puede resumirse de forma fácil de una frase.

Es sabido por muchos que la mayoría de los scripts PHP usan Bases de Datos MySQL para almacenar los datos. Entre estos datos es muy común guardar fechas, por ejemplo, al publicar un artículo en un blog o al editar un mensaje de un foro, aunque ejemplos hay a toneladas.

Estas fechas se pueden guardar de muchas formas, pero una de las más fáciles de leer es la que genera la función CURRENT_TIMESTAMP. Esta función genera fechas como la siguiente: 2009-09-03 13:58:56. Como podéis ver es un formato muy fácil de leer, sin embargo no es el formato al que solemos estar acostumbrado (por ejemplo, Jueves 3 de Septiembre de 2009, 13:58).

Transformar la fecha que genera CURRENT_TIMESTAMP manualmente para que devuelva el formato al que estamos acostumbrados es una tarea larga y lenta (y en algunos casos compleja). No hay más que pensar que deberíamos crear una función que determine qué día de la semana es cada día del año y del mes para que a muchos se nos vayan las ganas de crear una función similar.

No obstante, PHP nos permite usar la función date(), una función la mar de útil: Nos muestra la fecha actual en el formato que queramos. Podemos mostrar sólo el año, el día, el día con dos dígitos, la semana del año, el mes, el nombre del día de la semana, el nombre del mes, y muchísimos más datos. Lo mejor es que también podemos usar la función date() para que nos genere esos datos de una fecha dada. En este caso usaremos la función date() para que genere todos esos datos basándose en la fecha que tenemos en nuestra Base de Datos.

Sin embargo, la función date() no acepta la fecha en el formato en la que la tenemos, sinó en el formato UNIX, así que primero tendremos que convertir nuestra fecha. Para ello recurriremos a la función strtotime().

Finalmente nuestro pequeño script para convertir la fecha quedaría así:

/* Función */
function convertir_fecha($fecha, $formato_final='') {
if ($formato_final == '') {
/* Si no se ha especificado formato, se devuelve la fecha tal como la teníamos al principio */
return $fecha;
} else {
return date($formato_final, strtotime($fecha));
}
/* Aplicación */
echo convertir_fecha('2009-08-29 12:45:05', 'D j \de F \del Y a \las G:i');
// Mostrará: Sat 29 de August del 2009 a las 12:45
?>

Los parámetros que aceptará la función convertir_fecha() son los mismos que acepta la función date().

No es nada nuevo, podíamos hacer esto desde hace tiempo, pero es hoy cuando me he fijado en el segundo parámetro de la función date() y todas las posibilidades que ofrece a los programadores.

PD: No me he parado a explicar el funcionamiento de cada función, ya que es bastante simple y la documentación lo deja bastante claro.