Formatear, validar y comparar fechas con Javascript (moment.js)

Balu29 Abril 2014 - 10:44pm 0 comentarios
Enviar por Email Imprimir

Formatear, validar y comparar fechas con Javascript (moment.js)

Trabajar fechas y horas con JavaScript siempre ha sido un poco engorroso. Por lo que en este artículo vamos a trabajar con una librería de JavaScript especialmente diseñada para manipular fechas.

Primeros pasos con Moment.js

Moment.js es una librería gratuita que podemos descargar desde la página del proyecto. Moment.js se puede ejecutar desde el navegador, así como desde una aplicación Node.js. Para poder utilizarlo con Node.js, hay que instalar su módulo con el siguiente comando.

npm install moment

Luego, simplemente la incluimos y ya podemos trabajar con ella.

var moment = require('moment');

moment().format();

A fin de ejecutar Moment.js desde el navegador, simplemente descargamos el script y lo incluimos usando la etiqueta script. Aquí, Moment.js crea un objeto global llamado moment, el cual se puede utilizar para acceder a todas las funcionalidades de manipulación y parseo de fechas y hora.

<script src="moment.js"></script>
<script>
      moment().format();
</script>

Formatear Fechas

En el pasado, para formatear strings de fechas a objetos Date, se requería individualizar partes de los datos y luego realizar concatenaciones de strings. Moment.js nos ha simplificado este proceso de conversión de fechas a cualquier formato en especial. La conversión del formato de fechas con Moment.js es muy simple, por ejemplo.

moment().format('YYYY MM DD');

Moment() devuelve la fecha y hora actual, mientras que format() convierte la fecha y hora actual al formato especificado. El ejemplo anterior formatea una fecha como un año de cuatro dígitos, seguido de un espacio, seguido de un mes de dos dígitos, otro espacio y una fecha de dos dígitos.

Validar Fechas

Otra tarea molesta que Moment.js ha simplificado es la validación de fechas. Con el fin de realizar la validación, simplemente pasamos una cadena de la fecha al objeto moment y llamamos al método isValid(). Este método devuelve true si la fecha es válida y false en caso contrario. Por ejemplo…

var dateEntered = $('#txtEnteredDate').val();

if (!moment(dateEntered).isValid()) {
  console.log('Invalid Date');
} else {
  console.log('Valid Date');
}

Además de la mencionada, hay otra variada gama de información que el objeto moment() puede proporcionarnos:

overflow.- Se establece cuando el valor se excede. Por ejemplo, cuando estamos en el décimo tercer mes o en el día 32.
invalidMonth.- Se establece cuando el mes es inválido, por ejemplo Jannuarry.
empty.- Se establece cuando la fecha introducida no contiene datos parseables.
nullInput.- Se establece cuando la fecha introducida es null.

Manipular Fechas

Hay un buen número de opciones para manipular el objeto moment. Por ejemplo, se puede sumar o restar fechas (días, meses, años, etc.). Esto se logra mediante el uso de los métodos add() y subtract(). El siguiente ejemplo muestra cómo se agregan siete días, meses o semanas a la fecha actual.

moment().add('days', 7);    // adds 7 days to current date
moment().add('months', 7);  // adds 7 months to current date
moment().add('years', 7);   // adds 7 years to current date

De igual forma, el método subtract() se muestra a continuación.

moment().subtract('days', 7);   // subtracts 7 days to current date
moment().subtract('months', 7); // subtracts 7 months to current date
moment().subtract('years', 7);  // subtracts 7 years to current date

Calcular el tiempo transcurrido desde ahora

Otra tarea recurrente que realizamos es calcular el tiempo transcurrido entre dos fechas. Para ello, Moment.js utiliza el método fromNow(). Por ejemplo…

moment().fromNow();

El código anterior muestra “a few seconds ago” (hace unos segundos). Si proveemos una fecha al objeto moment nos mostrará el rango de tiempo a partir de ahora. Por ejemplo, el siguiente código muestra “7 days ago”.

var dateA = moment().subtract('days', 7);
dateA.fromNow();

fromNow() también es usado para comparar el tiempo respecto de la fecha actual.  Este es un caso especial de from(), el cual compara dos fechas proporcionadas. Un ejemplo que utiliza el método from() se muestra a continuación. Este código muestra “in a day” (en un día).

var dateB = moment('2014-12-12');
var dateC = moment('2014-12-11');
 
console.log(dateB.from(dateC));

Calcular la diferencia entre dos fechas

Moment.js ofrece una manera sencilla para calcular la diferencia entre dos fechas. La diferencia se calcular en base a milisegundos, aunque también puede ser devuelto en días, meses, años, etc. Para calcular la diferencia, llamamos al método diff(). Este método toma una fecha como su primer argumento. La unidad de tiempo puede ser definida mediante el segundo y opcional argumento. Si este no es proporcionado, se calculará en base a milisegundos. Por ejemplo…

var dateB = moment('2014-11-11');
var dateC = moment('2014-10-11');
 
console.log('Difference is ', dateB.diff(dateC), 'milliseconds');
console.log('Difference is ', dateB.diff(dateC, 'days'), 'days');
console.log('Difference is ', dateB.diff(dateC, 'months'), 'months');

Soporte de idiomas

Moment.js ofrece soporte a una multitud de idiomas. Se puede asignar un idioma global o definir el idioma para un objeto moment en particular. Por defecto, Moment.js soporta el idioma Inglés. Si se desea añadir soporte a otro idioma, le asignamos el valor clave de ese idioma en particular a moment.lang. Por ejemplo, el siguiente código muestra como añadir soporte al español.

moment.lang("es");

Conclusión

Moment.js es una excelente librería que simplifica el trabajo de manipular, formatear y validar fechas y horas.  En este artículo, nos centramos en algunas de las características de moment.js. Sin embargo, la librería también cuenta con una serie de plugins que podemos descargar desde su página oficial.

Tutoriales

Cómo descargar videos de VK.com
En este artículo voy a explicar como descargar videos y películas...
Descargar Facebook Móvil Gratis
Por si aún no lo han hecho, es posible descargar Facebook Móvil...
Cómo generar tráfico web con las redes sociales - Paso a Paso
Muchas empresas están publicando contenidos como la forma de crear...

Artículo Recomendado

3 Tips cruciales para recuperar archivos eliminados
¿Te imaginas perder el trabajo de toda una semana en tan solo unos segundos? Todos hemos pasado por este problema. Quizás eliminamos por error un archivo importante o lo borramos sin pensar que era valioso para otro... más