Clase SpoonDate

  • Por
  • PHP
Veamos la clase SpoonDate de las librerías Spoon, con utilidades para obtener una fecha en múltiples idiomas y para averiguar el tiempo transcurrido desde una fecha.
Hace unas semanas comentamos unas librerías para PHP 5 llamadas Spoon, que contienen una serie de clases y funciones para realizar tareas habituales dentro de aplicaciones web con PHP. Estas librerías son bastante sencillas de usar y proveen de funcionalidades interesantes que nos ahorrarán tiempo.

Los interesados en obtener una introducción a Spoon pueden leer el Manual sobre las Librerías Spoon. Nosotros en este artículo pretendemos dar un ejemplo sobre el uso de una de las clases que nos ofrece Spoon para realizar cosas con fechas, que pueden venirnos bien en nuestros proyectos. En este caso vamos a ver una clase que tiene solamente un par de métodos estáticos (que podremos llamar a partir del nombre de la clase) con los que averiguar el tiempo transcurrido desde una fecha o mostrar una fecha en cualquier idioma.

Incluir la librería Spoon Date

La clase que contiene las funcionalidades para fechas de Spoon se llama SpoonDate y este sería el código necesario para iniciar Spoon e incluir la librería de trabajo con fechas.

//Definir el directorio donde está la carpeta spoon y añadir a la ruta de includes de PHP
define('PATH_LIBRARY', 'C:/xampp/htdocs/');
set_include_path(get_include_path() . PATH_SEPARATOR . PATH_LIBRARY);

//incluir ahora spoon
require_once 'spoon/spoon.php';
//incluyo también la librería date
require_once 'spoon/date/date.php';

Como hemos dicho, dentro de la librería Date de Spoon, tenemos una clase que tiene apenas dos métodos estáticos. Como son estáticos, recordamos que podremos invocarlos directamente a partir del nombre de la clase, con el operador "::". Por ejemplo:

SpoonDate::getDate();

Función multiidioma para obtener una fecha con PHP

La función date(), nativa de PHP, tiene una funcionalidad bastante buena para escribir fechas en distintos formatos. El problema es que las cadenas de texto de las fechas que obtenemos con date() están escritas en inglés, por lo que a nosotros no nos sirve del todo. Lo más seguro es que nosotros queramos mostrar las fechas en español, o que deseemos hacer una web multiidioma y en ese caso esa función se nos queda corta.

Para obtener entonces esa fecha en español, o cualquier otro idioma, utilizamos la función getDate() de Spoon, que recibe los siguientes parámetros:

SpoonDate::getDate($formato, $timestamp_de_la_fecha, $idioma, $GMT);

$formato: Sirve para indicar el formato de la fecha que queremos obtener, que es una cadena de caracteres igual que el formato que enviamos a la función date() de PHP.

$timestamp: es un entero con el timestamp de la fecha que queremos mostrar. Ese timestamp podemos obtenerlo con las funciones time() (timestamp del momento actual) o mktime() (timestamp de cualquier momento enviado como parámetro).

$idioma: que es un string con el código del idioma que deseemos utilizar. Los valores serán como "en" para inglés, "es" para español, "fr" para francés, etc. Podremos ver todos los códigos de idioma en el directorio "locale/data" que hay dentro del directorio de "spoon".

$GMT: un boleano que indica si se puede considerar el timestamp como GMT/UTC.

Por ejemplo, con este código mostramos la fecha de hoy en perfecto español:

echo SpoonDate::getDate("l j de F de Y", time(), 'es');

Averiguar el tiempo transcurrido desde una fecha

La otra de las funciones que incorpora la clase SpoonDate nos sirve para mostrar de una forma resumida el tiempo que ha transcurrido desde un timestamp que devemos enviar por parámetro. Esta manera de ver el tiempo es muy popular en las páginas actuales y no indica el tiempo completo pasado, sino una parte.

El método estático que vamos a ver se llama getTimeAgo() y digo que muestra sólo una parte del tiempo transcurrido porque sólo nos indica el mayor de los intervalos de tiempo utilizados. Por ejemplo, si la han pasado 3 horas, 40 minutos y 30 segundos desde un timestamp, la función nos devuelve simplemente "3 horas". Otros valores que podremos recibir para expresar el tiempo pasado, serían por ejemplo "34 segundos", "5 días" o "4 meses".

Los parámetros que debemos enviar son los siguientes:

SpoonDate::getTimeAgo($timestamp,$idioma);

$timestamp: El primer parámetro es para indicar el timestamp de la fecha sobre la que queremos calcular el tiempo transcurrido.

$idioma: el código de idioma. Por ejemplo, "es" para español. Recordando que los códigos de idioma disponibles inicialmente están en el directorio "locale/data" de Spoon.

Ahora, podemos ver un posible uso de esta función:

SpoonDate::getTimeAgo(time()-23,'es');

Eso nos diría que han pasado "23 segundos", ya que estamos enviando el timestamp actual (obtenido por la función time() de PHP) restándole 23.

Nota: Si tienes algún problema porque la función devuelva una cadena en UTF8, si es que estás trabajando con otro juego de caracteres, puedes utilizar la función utf8_decode().
utf8_decode(SpoonDate::getTimeAgo($tiempo,'es'));

Ejemplo de trabajo con SpoonDate y varias fechas

En este sencillo ejemplo vamos a tener varias fechas en un array y luego recorreremos el Array para mostrar el tiempo transcurrido desde esa fecha y la propia fecha escrita en idioma español.

$tiempos = array(time(), time()-(3*60), time()-(4*60*60*24), mktime(12,3,0,5,24,2010), mktime(0,0,0,9,17,1940));

foreach($tiempos as $tiempo){
   echo '<p> Publicado ';
   echo SpoonDate::getTimeAgo($tiempo,'es');
   echo ' desde ';
   echo SpoonDate::getDate("l j de F de Y", $tiempo, 'es');
}

Al ejecutar ese código recibiremos una salida como la siguiente:

Publicado hace 1 segundo (martes 15 de junio de 2010)
Publicado hace 3 minutos (martes 15 de junio de 2010)
Publicado hace 4 días (viernes 11 de junio de 2010)
Publicado hace 3 semanas (lunes 24 de mayo de 2010)
Publicado hace 61 años (viernes 17 de septiembre de 1948)

Eso es todo sobre la librería date() de Spoon para trabajo con fechas. Creo que podemos decir sin miedo a equivocarnos que las funcionalidades disponibles en el momento de escribir este artículo no son muy variadas, pero al menos son bastante útiles.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Jaime

02/9/2012
Spoon getDate
Una aclaración: para incluir cadenas personalizadas en la salida de getdate es necesario escapar los caracteres con la barra invertida. de sería igual a de; de lo contrario la letyra será sustituida por su equivalencia dentro de la función getDate

SpoonDate::getDate("l j de F de Y", time(), 'es');