Si alguna vez has tenido que lidiar con el objeto Date() en Javascript sabrás perfectamente lo tedioso que puede llegar a ser manipularlo y obtener el resultado que deseamos para nuestra aplicación. Moment.js es una pequeña librería que simplifica hasta niveles absurdos procesar, validar y trabajar con fechas. Como ejemplo, uno de los muchos que hay en su página Web:

moment().format('MMMM Do YYYY, h:mm:ss a'); // August 28th 2013, 6:27:20 pm  
moment().format('dddd'); // Wednesday  
moment().format("MMM Do YY"); // Aug 28th 13  
moment().format('YYYY [escaped] YYYY'); // 2013 escaped 2013  
moment().format(); // 2013-08-28T18:27:20+02:00  

Encontré esta maravilla a través de Stackoverflow mientras buscaba ayuda a la hora de usar las capacidades nativas de geo-localización en Android usando el SDK de Appcelerator Titanium. A diferencia de iOS (donde es mucho más sencillo), en Android, por defecto, cuando solicitamos obtener la localización actual al dispositivo (latitud, longitud), ya sea a través de GPS o por proveedores de red, siempre se obtiene un resultado cacheado, es decir, la última geo posición guardada en el dispositivo, obtenida por cualquier aplicación que haga uso de esa característica (Facebook, Foursquare, Maps, etc.). Lo que convierte en un reto obtener posiciones certeras en nuestra APP Android.

La solución, obviamente, es (entre otras cosas) averiguar si esa última posición es reciente (lo que podría indicar que es válida) o es antigua (por lo que habría que activar el GPS para obtener una nueva), y es ahí donde conecto esta divagación con el motivo de la entrada, ya que para lograrlo hay que comprar la antigüedad de esas capturas de posiciones (o «fixes»). Cada una viene con una referencia timestamp que indica cuándo fueron capturadas, así que Moment.js es perfecto para la ocasión:

// Cargamos Moment.js como módulo
var moment = require('/moment'), 

// 3 minutos es la máxima antigüedad que quiero en el fix 
comparar = 180,  
ahora = moment(),

// El objeto devuelto por Android
ultimo = moment(e.coords.timestamp), 

// Quiero la diferencia en segundos
resultado = ahora.diff(ultimo, 'seconds'); 

// La lógica de la comparación...
if (resultado > comparar)  

Como es normal, el verdadero potencial desde esta librería se libera en tareas más complicadas que la expuesta arriba. Se trata de un ejemplo para que podáis ver lo sencillo que es utilizar Moment.js y la cantidad de horas de sueño y tazas de café que nos puede ahorrar 🙂