Librería javascript indispensable para manipular la fecha y la hora
La manipulación de la fecha y la hora en Javascript siempre ha causado dolores de cabeza a los desarrolladores. Es una de las partes más tediosas del lenguaje. Por suerte han aparecido librerías como momentjs que nos facilitarán enormemente trabajar con el objeto Date. Una vez hayas leído este artículo la encontrarás indispensable.
Puedes descargar la última versión de moment.js en su página oficial. Este framework es gratuito y de código libre.
Vamos a la acción con una serie de ejemplos:
Creamos un objeto moment
const ahora = moment()
Creamos una fecha año, mes, dia
const fechaHoy = moment([2015, 3, 15]);
Hasta aquí nada nuevo, casi exactamente igual que crear un objeto Date de Javascript solo que con la nueva librería.
Hora actual
moment().format('HH:mm:ss') // "15:46:28"
Día de la semana
moment().day() // numérico indicando el número de díamoment().format('HH:mm:ss') // "15:46:28"
Mes actual
moment().month // numérico indicando el número de mesmoment().format('HH:mm:ss') // "15:46:28"
Nombre del mes actual
moment.months()[moment().month()] // en inglés: Marchmoment().format('HH:mm:ss') // "15:46:28"
Vamos a complicar un poco las cosas:
const fecha = moment([2000, 1, 1]) // 1/1/2000
¿Cuánto tiempo ha pasado?
fecha.fromNow(true) // años que han pasado desde la fecha
fecha.add(20, 'years') // añade 20 años a la fecha
fecha.subtract(20, 'days') // resta 20 días a la fecha
Comprobar si una fecha es anterior a otra
moment('2015-10-20').isBefore('2015-10-21')
Comprobar si es la misma fecha
moment('2015-10-20').isSame('2015-10-20')
Comprobar si la fecha esta entre otras dos
moment('2015-10-20').isBetween('2015-10-19', '2015-10-25')
Comprobar si un año es bisiesto
moment([2000]).isLeapYear()
Esta librería permite localizarla para el idioma español. Tan solo tenemos que añadir el archivo de las traducciones y definir el idioma antes de ejecutar cualquier otra instrucción:
moment.locale('es')
Si necesitáis todos los idiomas podéis descargarlos en http://momentjs.com/downloads/moment-with-locales.js, pero aquí os dejo la versión en español:
// moment.js locale configuration// locale : spanish (es)// author : Julio Napurí : https://github.com/julionc
(function (factory) { factory(moment);}(function (moment) { cost monthsShortDot = 'ene,feb,mar,abr,may,jun,jul,ago,sep,oct,nov,dic.'.split(','), monthsShort = 'ene,feb,mar,abr,may,jun,jul,ago,sep,oct,nov,dic'.split(',');
return moment.defineLocale('es', { months : 'enero,febrero,marzo,abril,mayo,junio,julio,agosto,septiembre,octubre,noviembre,diciembre'.split(','), monthsShort : function (m, format) { if (/-MMM-/.test(format)) { return monthsShort[m.month()]; } else { return monthsShortDot[m.month()]; } }, weekdays : 'domingo,lunes,martes,miércoles,jueves,viernes,sábado'.split(','), weekdaysShort : 'dom,lun,mar,mié,jue,vie,sáb.'.split(','), weekdaysMin : 'Do,Lu,Ma,Mi,Ju,Vi,Sá'.split(','), longDateFormat : { LT : 'H:mm', LTS : 'LT:ss', L : 'DD/MM/YYYY', LL : 'D [de] MMMM [de] YYYY', LLL : 'D [de] MMMM [de] YYYY LT', LLLL : 'dddd, D [de] MMMM [de] YYYY LT' }, calendar : { sameDay : function () { return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextDay : function () { return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, nextWeek : function () { return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastDay : function () { return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, lastWeek : function () { return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT'; }, sameElse : 'L' }, relativeTime : { future : 'en %s', past : 'hace %s', s : 'unos segundos', m : 'un minuto', mm : '%d minutos', h : 'una hora', hh : '%d horas', d : 'un día', dd : '%d días', M : 'un mes', MM : '%d meses', y : 'un año', yy : '%d años' }, ordinalParse : /\\d{1,2}º/, ordinal : '%dº', week : { dow : 1, // Monday is the first day of the week. doy : 4 // The week that contains Jan 4th is the first week of the year. } });}));
No olvides visitar la página oficial de momentjs para leer toda la documentación.