Calcular la diferencia de meses entre dos fechas en JavaScript es una tarea común cuando se trabaja con tiempos y fechas en aplicaciones web. Para lograrlo, es necesario manipular los objetos Date
y utilizar algunos cálculos adicionales, ya que JavaScript no tiene un método nativo específico para esta operación.
La forma más directa de calcular la diferencia de meses entre dos fechas es extrayendo los años y meses de cada fecha y luego realizar los cálculos correspondientes:
function diferenciaMeses(fecha1, fecha2) {
const años = fecha2.getFullYear() - fecha1.getFullYear();
const meses = fecha2.getMonth() - fecha1.getMonth();
return años * 12 + meses;
}
const fechaInicio = new Date(2023, 0, 15); // 15 de enero de 2023
const fechaFin = new Date(2024, 5, 10); // 10 de junio de 2024
console.log(diferenciaMeses(fechaInicio, fechaFin)); // Resultado: 17
Aunque Moment.js está en desuso, sigue siendo una opción para algunos proyectos antiguos. Para calcular la diferencia de meses entre dos fechas, Moment.js ofrece un método simplificado:
const fechaInicio = moment("2023-01-15");
const fechaFin = moment("2024-06-10");
const diferencia = fechaFin.diff(fechaInicio, 'months');
console.log(diferencia); // Resultado: 17
fechaInicio
es posterior a la fechaFin
, el resultado puede ser negativo, reflejando que la primera fecha es más reciente.
date-fns
o dayjs
, que ofrecen funciones optimizadas y con soporte activo.
1. Cálculo Básico entre Fechas del Mismo Año:
const fecha1 = new Date(2023, 2, 1); // 1 de marzo de 2023
const fecha2 = new Date(2023, 8, 15); // 15 de septiembre de 2023
console.log(diferenciaMeses(fecha1, fecha2)); // Resultado: 6
2. Cálculo Entre Fechas de Años Diferentes:
const fecha1 = new Date(2022, 11, 25); // 25 de diciembre de 2022
const fecha2 = new Date(2024, 0, 5); // 5 de enero de 2024
console.log(diferenciaMeses(fecha1, fecha2)); // Resultado: 13
3. Uso de date-fns
para Mayor Precisión:
import { differenceInMonths } from 'date-fns';
const fecha1 = new Date(2023, 0, 15); // 15 de enero de 2023
const fecha2 = new Date(2024, 5, 10); // 10 de junio de 2024
console.log(differenceInMonths(fecha2, fecha1)); // Resultado: 17
Jorge García
Fullstack developer