Sumar y restar fechas en Javascript

Introducción

En nuestra vida como programadores hay cosas fáciles y difíciles. Personalmente, el trabajo con fechas se me hacía complicado al inicio.

Hoy veremos cómo sumar y restar fechas en Javascript para poder calcular rangos, estimar qué fecha fue hace una semana, etcétera.

Será muy fácil y nos ayudará a entender las cosas.

Nota: ¿Quieres operar fechas pero usando Java? si es así, visita: sumar y restar fechas con Java.

Explicación

Para sumar y restar fechas el algoritmo es muy, muy sencillo. No vamos a parsear cadenas ni cosas de esas que dan miedo; nada de eso. Lo único que haremos será convertir las fechas a un objeto de tipo Date.

Después, con Date obtendremos el tiempo unix con .getTime() que nos dará un entero muy grande. A ese entero lo podemos dividir para sacar segundos (dividir entre 1000), o para minutos (dividir entre 1000/60), etcétera.

Finalmente, estos milisegundos los convertimos de nuevo a una fecha legible y todo listo 😉

Sumar fechas con Javascript

Calcular tiempo a futuro

Comencemos viendo cómo podemos saber qué fecha será dentro de una semana a partir de hoy. Al momento de escribirlo, es 14 de mayo. Fácilmente podríamos sacar el 14 de la fecha, sumarle 7 y decir que es 21.

Gran error, ya que funciona para este momento, pero no funcionaría si hoy fuera 31 de mayo, pues daría un resultado de 38.

Mejor instanciamos una fecha:

let hoy = new Date();

Calculamos cuántos milisegundos tiene una semana:

let semanaEnMilisegundos = 1000 * 60 * 60 * 24 * 7;

Como se puede ver, multiplicamos 1000 milisegundos por sesenta segundos, por sesenta minutos, por 24 horas y finalmente por 7 días.

Luego hacemos la suma:

let suma = hoy.getTime() + semanaEnMilisegundos; //getTime devuelve milisegundos de esa fecha

Y para terminar instanciamos, de nuevo, un objeto de tipo Date pero le pasamos un argumento: la suma de milisegundos:

let fechaDentroDeUnaSemana = new Date(suma);

El código completo se ve así:

Al ejecutarlo, podemos ver que efectivamente ha sumado las fechas con una exactitud de milisegundos…

Restar fechas con Javascript

Calcular tiempo de hace algunos días

Hagamos lo contrario. Veamos cuál es la fecha de hace 16 días, esto lo hago para ejemplificar que podemos sumar y restar todo tipo de medida de tiempo.

Obtenemos la fecha de hoy:

let hoy = new Date();

Hacemos la operación para saber cuánto es, en milisegundos, 16 días:

let dieciseisDias = 1000 * 60 * 60 * 24 * 16;

Calculamos la resta e instanciamos la fecha de hace 16 días:

Con estos resultados:

Calcular tiempo transcurrido entre 2 fechas

Al restar fechas también podemos saber la cantidad de tiempo transcurrido entre 2 de ellas.

Tenemos que obtener el tiempo de cada una de ellas, restarlo para obtener los milisegundos y luego convertirlos a días, semanas, meses o lo que sea.

Primero necesitamos nuestras dos fechas:

En este caso será la fecha de mañana, aunque dicha fecha puede venir de cualquier lado. Recuerda que si la fecha es una cadena debes ajustar su tiempo.

Luego sacamos la diferencia:

let diferencia = mañana.getTime() - hoy.getTime();

Recordemos que el resultado está en milisegundos, y en este caso lo convertiré a horas:

let horasTranscurridas = diferencia / 1000 / 60 / 60;

Por lo que, al ejecutarlo, estos son los resultados:

Notar por favor que la variable mañana la declaré yo, pero bien podría venir de cualquier lado como una cadena o un input de tipo fecha.

Conclusión

Si utilizas AngularJS te invito a leer cómo formatear una fecha y ponerla en un filtro para que sea legible para el usuario.

También es importante que sepas cómo ajustar las fechas si las instancias desde una cadena.

Finalmente, he aquí la documentación oficial de Date.

Sumar y restar fechas en Javascript

Por parzibyte Tiempo de lectura: 3 min
2