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.
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 😉
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í:
let hoy = new Date();
let semanaEnMilisegundos = 1000 * 60 * 60 * 24 * 7;
let suma = hoy.getTime() + semanaEnMilisegundos; //getTime devuelve milisegundos de esa fecha
let fechaDentroDeUnaSemana = new Date(suma);
Al ejecutarlo, podemos ver que efectivamente ha sumado las fechas con una exactitud de milisegundos…
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:
let resta = hoy.getTime() - dieciseisDias;
let fechaDeHaceDieciseisDias = new Date(resta);
Con estos resultados:
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:
let hoy = new Date();
let mañana = new Date(hoy.getTime() + 1000 * 60 * 60 * 24); //Calcular fecha a futuro para ejemplificar
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.
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.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.
Ver comentarios
A la fecha de hoy funciona excelente, gracias por tu aporte, me ayudó mucho!
Excelente tip
Gracias!
Muchas didactico. Excelente blog.