MomentJS: La solución a tus problemas de fecha
La biblioteca MomentJS ofrece herramientas realmente sólidas para gestionar el formato de nuestras fechas. Cuando programamos, la gestión de las fechas siempre son una parte importante de nuestro código a tener en cuenta, ya que estas cambian a lo largo del tiempo.
Esta biblioteca ya es utilizada por miles de software, aplicaciones y servicios alrededor del mundo y recientemente dejará de actualizarse. Hay alternativas. Pero, si como nosotros, la usáis profusamente. Seguirá funcionando durante mucho tiempo. ¿Por qué es tan utilizada? Porque nos proporciona una gran fiabilidad y libertad a la hora de especificar cómo queremos nuestras fechas.
Para empezar a utilizar esta librería en nuestro proyecto de node ejecutaremos:
npm install moment
Posteriormente, dependiendo de la sintaxis utilizada, importaremos la libreria :
//En JavaScript Vanilla
var moment = require('moment'); // require
moment().format();
//En ES6
import moment from 'moment';
moment().format();
Funciones básicas
moment()
Cuando queremos obtener la fecha de hoy new Date()
y moment()
son muy similares a la hora de utilizarse, la principal diferencia entre utilizar el objeto de la API de JavaScript y MomentJS es que Moment da soporte al traspaso de fechas internacionales.
Además, Moment encapsula toda la lógica del objeto «Date», simplificándola para un uso más sencillo. Esto nos permite obtener un código de calidad más limpio y eficiente con soporte a largo plazo.
//Uso
console.log(moment());
//Output
"2024-03-06T11:32:16.297Z"
Utilizar moment()
como se ha mencionado anteriormente devolverá el objeto con sus funciones junto con un texto de la fecha actual en formato ISO8601, el cual equivale al formato YYYY-MM-DDTHH:mm:ssZ.
Opcionalmente, la función acepta parámetros de fecha o formato, devolviendo así el parámetro formateado correctamente. La función adicionalmente puede contener un booleano para exigir que tanto la fecha como el formato introducido sean estrictamente iguales.
.startOf() & .endOf()
Ambas funciones, cómo sus nombres indican, permiten extraer el inicio o final de una fecha respectivamente, pasándoles un parámetro de unidad de tiempo. Ya no es estrictamente necesario preocuparse de substraer o añadir días para encontrar un inicio o final de una fecha deseada.
Las unidades disponibles por parámetro son:
- Año
- Mes
- Cuarto (primer día del año actual)
- Semana (primer día siendo el domingo)
- Semana en formato ISO (primer día siendo el lunes)
- Día
- Fecha (Similar al formato anterior)
- Hora (Minutos, segundos y milisegundos en 0)
- Minuto (Segundos y milisegundos a 0)
- Segundo (Milisegundos a 0)
Ejemplos de uso:
//Primer día del mes
moment().startOf('months').format("DD");
//Último día del mes
moment().endOf('months').format("DD");
.format()
Ya hemos visto la función format()
en ejemplos anteriores. Como podemos imaginar, esta función admite un parámetro de tipo texto, y al ser utilizada junto al objeto de moment nos devolverá formateada la fecha del objeto en el formato especificado.
Ejemplos de uso:
//Uso
console.log(moment("1234", "hmm").format("HH:mm"));
//Output
"12:34"
//Uso
console.log(moment('2012-10-14').format('DD-MM-YY'));
//Output
"14-10-12"
.subtract() & .add()
Es muy común que a la hora de trabajar con fechas tengamos la necesidad de substraer o sumar valores a dicho momento. Para ello moment()
nos ofrece estas dos funciones que facilitan muchísimo ese hecho.
Veamos diversos ejemplos en práctica:
//Uso => Hoy 08/03/2024
console.log(moment().subtract(1,'days').format("DD/MM/YYYY"));
//Output
"07/03/2024"
//Uso
console.log(moment().add(3,'days').format("DD/MM/YYYY"));
//Output
"11/03/2024"
//Uso
console.log(moment().subtract(2,'months').format("DD/MM/YYYY"));
//Output
"08/01/2024"
//Uso
console.log(moment().add(2,'weeks').format("DD/MM/YYYY"));
//Output
"22/03/2024"
.isBefore() & .isAfter() & .isBetween()
Hay casos en los que queremos saber si un plazo ha pasado antes, después o está dentro de un rango de momentos concreto. Estas funciones son realmente versátiles, ya que además de permitirnos pasar por parámetro una fecha en formato texto, también permite el uso de objetos Date()
y moment()
. Cuando utilicemos estos tres procesos, si la condición se cumple devolverá un booleano respectivamente.
Diversos ejemplos:
//Uso
let yesterday = moment().subtract(1,'days');
let today = moment();
console.log(today.isAfter(yesterday));
//Output
true
//Uso
let aYearAgo = moment().subtract(1,'years');
let today = moment();
console.log(aYearAgo.isBefore(today));
//Output
true
//Uso
console.log(moment('2012-10-20').isBetween('2010-10-19', '2010-10-25'));
//Output
false
.isLeapYear()
.isLeapYear()
es un método que devuelve un condicional si el año de la fecha especificada es bisiesto.
//Uso
console.log(moment([2024]).isLeapYear());
//Output
true
//Uso
console.log(moment([2001]).isLeapYear());
false
En conclusión, Moment.js es una gran librería que simplifica la manera en la que tratamos las fechas, permitiéndonos integrar un código mucho más limpio y eficiente a la hora de controlar los datos de fecha en nuestras aplicaciones.