Como desarrollador, te habrás dado cuenta que en la gran mayoría de los proyectos, se necesita manipular fechas de alguna una forma u otra. Ya sea buscando el último día del mes, comparando fechas, buscando cuanto tiempo ha pasado entre 2 fechas, entre otros. En fin, saber cómo manipular fechas es algo esencial al desarrollar aplicaciones.

Agraciadamente existe la librería Moment.js. Moment.js es una librería para Javascript que permite que manipular fechas sea algo extremadamente sencillo. ¿A quién le interesa?

Excited Episode 11 GIF - Find & Share on GIPHY

Instalación

Primero, necesitas instalar la librería. Puedes bajarla aquí y referenciarla en tu página web o, si estas usando npm, yarn y otra herramienta de manejo de paquetes, puedes usar el código de abajo.

npm install moment --save   # npm
yarn add moment             # Yarn
Install-Package Moment.js   # NuGet
spm install moment --save   # spm
meteor add momentjs:moment  # meteor

Bien, ahora veamos ejemplos prácticos de manipulación de fechas usando Moment.js.

Calcular el comienzo y final

Para buscar el comienzo y final, Momen.js tiene dos funciones, startOf y endOf. Con estas funciones puedes conseguir el cuándo comienza o termina un día, semana, mes o año. Todo depende de la fecha base.

Sencillo, ¿verdad?

Comparación de fechas

Una de las cosas que más hacemos con las fechas es comprarlas. Y para esto Moment.js nos provee también, dos funciones, isBefore, isAfter, isSame, isBetween y isLeapYear. Veamos cómo se utiliza:

Manipulación de fechas

También, podemos usar esta librería para manipular fechas. Esto quiere decir que podemos sumar o restar desde milisegundos hasta años. Para esto usamos las funciones add y substract.

Tiempo entre 2 fechas

Si queremos calcular cuánto tiempo ha pasado entre una fecha y otra, podemos hacerlo de la siguiente manera:

Aplicar formato de fechas

Para aplicarle formato a una fecha, usamos la función format pasando como parámetro la sintaxis del formato deseado. La siguiente tabla muestra la sintaxis requerida para darle formato a las fechas.

Token Resultado
Mes M 1 2 … 11 12
Mo 1st 2nd … 11th 12th
MM 01 02 … 11 12
MMM Jan Feb … Nov Dec
MMMM January February … November December
Trimestre Q 1 2 3 4
Qo 1st 2nd 3rd 4th
Día del mes
D 1 2 … 30 31
Do 1st 2nd … 30th 31st
DD 01 02 … 30 31
Día del año
DDD 1 2 … 364 365
DDDo 1st 2nd … 364th 365th
DDDD 001 002 … 364 365
Día de la semana
d 0 1 … 5 6
do 0th 1st … 5th 6th
dd Su Mo … Fr Sa
ddd Sun Mon … Fri Sat
dddd Sunday Monday … Friday Saturday
Semana del año
w 1 2 … 52 53
wo 1st 2nd … 52nd 53rd
ww 01 02 … 52 53
Wo 1st 2nd … 52nd 53rd
WW 01 02 … 52 53
Año YY 70 71 … 29 30
YYYY 1970 1971 … 2029 2030
Y 1970 1971 … 9999 +10000 +10001
Note: This complies with the ISO 8601 standard for dates past the year 9999
Semana año
gg 70 71 … 29 30
gggg 1970 1971 … 2029 2030
GGGG 1970 1971 … 2029 2030
AM/PM A AM PM
a am pm
Hora H 0 1 … 22 23
HH 00 01 … 22 23
h 1 2 … 11 12
hh 01 02 … 11 12
k 1 2 … 23 24
kk 01 02 … 23 24
Minuto m 0 1 … 58 59
mm 00 01 … 58 59
Segundo s 0 1 … 58 59
ss 00 01 … 58 59
Fracción de segundo
S 0 1 … 8 9
SS 00 01 … 98 99
SSS 000 001 … 998 999
SSSS … SSSSSSSSS 000[0..] 001[0..] … 998[0..] 999[0..]
Z -07:00 -06:00 … +06:00 +07:00
ZZ -0700 -0600 … +0600 +0700
Unix Timestamp X 1360013296
Unix Millisecond Timestamp x 1360013296123

Aquí un ejemplo:

 

Como ves, esta librería hace que manipular fechas en javascript sea algo sumamente sencillo. ¿Has usado esta librería antes o tiene alguna otra? Cuéntame en los comentarios.