Diferencia en meses entre dos fechas en JavaScript
¿Cómo calcularía la diferencia para dos objetos Date() en JavaScript y solo devolvería el número de meses de la diferencia?
Cualquier ayuda sería genial :)
La definición de "el número de meses de diferencia" está sujeta a muchas interpretaciones. :-)
Puede obtener el año, mes y día del mes a partir de un objeto de fecha de JavaScript. Dependiendo de la información que esté buscando, puede usarla para calcular cuántos meses hay entre dos puntos en el tiempo.
Por ejemplo, improvisadamente:
function monthDiff(d1, d2) {
var months;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth();
months += d2.getMonth();
return months <= 0 ? 0 : months;
}
Mostrar fragmento de código
(Tenga en cuenta que los valores de mes en JavaScript comienzan con 0 = enero).
Incluir fracciones de meses en lo anterior es mucho más complicado, porque tres días en un febrero típico es una fracción mayor de ese mes (~10,714%) que tres días en agosto (~9,677%), y por supuesto, incluso febrero es un objetivo móvil. dependiendo de si es año bisiesto.
También hay algunas bibliotecas de fecha y hora disponibles para JavaScript que probablemente faciliten este tipo de cosas.
Nota : Solía haber un + 1
en lo anterior, aquí:
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
// −−−−−−−−−−−−−−−−−−−−^^^^
months += d2.getMonth();
Eso es porque originalmente dije:
... esto descubre cuántos meses completos hay entre dos fechas, sin contar los meses parciales (por ejemplo, excluyendo el mes en el que se encuentra cada fecha).
Lo eliminé por dos razones:
No contar los meses parciales resulta no ser lo que quieren muchas (¿la mayoría?) de las personas que llegan a la respuesta, así que pensé que debería separarlos.
No siempre funcionó ni siquiera según esa definición. :-D (Lo siento.)
Si no considera el día del mes, esta es, con diferencia, la solución más sencilla.
function monthDiff(dateFrom, dateTo) {
return dateTo.getMonth() - dateFrom.getMonth() +
(12 * (dateTo.getFullYear() - dateFrom.getFullYear()))
}
//examples
console.log(monthDiff(new Date(2000, 01), new Date(2000, 02))) // 1
console.log(monthDiff(new Date(1999, 02), new Date(2000, 02))) // 12 full year
console.log(monthDiff(new Date(2009, 11), new Date(2010, 0))) // 1
Tenga en cuenta que el índice mensual está basado en 0. Esto significa que January = 0
y December = 11
.