Algoritmos

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í:

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…

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:

let resta = hoy.getTime() - dieciseisDias;
let fechaDeHaceDieciseisDias = new Date(resta);

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:

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.

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.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

17 horas hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.