Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Lista de todos los meses que existen entre las 2 fechas, incluido el caso cuando la diferencia numérica entre las fechas es inferior a 30 días.

Quiero obtener una lista de todos los meses que existen entre las 2 fechas en JS. Por ejemplo:

'2021-04-25' a '2021-05-12' debe devolver [4,5] // case when num difference between dates is less than 30 days

'2021-04-25' a '2021-08-12' debería regresar [4,5,6,7,8]

'2021-10-25' a '2022-02-12' debería devolver [10,11,12,1,2]

El siguiente código funciona pero no da el resultado correcto para '2021-04-25' a '2021-05-12'. regresa solo [4]

Probé ejemplos aquí JavaScript: ¿obtener todos los meses entre dos fechas? pero momentjs no da endMonth si días <30

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

En el sitio de momentjs dicen: "Ahora, en general, consideramos que Moment es un proyecto heredado en modo de mantenimiento. No está muerto, pero de hecho está hecho". Puede utilizar otra biblioteca como fecha de finalización.

Aquí hay un ejemplo con la misma lógica propuesta por AlTheLazyMonkey con date-fns

 import { addMonths, getMonth, isBefore, isEqual, startOfMonth } from "date-fns"; let start = "2021-06-15"; let end = "2021-12-26"; const isSameOrBefore = (start, end) => { const result = (isBefore(start, end) || isEqual(start, end)) ? true : false return result }; const getArrayOfMonths = (start, end) => { let startDate = startOfMonth(new Date(start)); let endDate = startOfMonth(new Date(end)); const arrayOfMonths = []; if (isBefore(endDate, startDate)) { console.log("End date must be greated than start date."); } while (isSameOrBefore(startDate, endDate)) { arrayOfMonths.push(getMonth(startDate) + 1); startDate = addMonths(startDate, 1); } return arrayOfMonths; }; console.log(getArrayOfMonths(start, end)); console.log(getArrayOfMonths("2021-02-15", "2021-9-15"));
about 4 years ago · Juan Pablo Isaza Denunciar

0

Creo que esta es una buena solución para obtener los resultados que está buscando.

 function getMonths(start, end) { start = moment(start).startOf('month'); end = moment(end).startOf('month'); if (start.isAfter(end))[start, end] = [end, start]; // This is only for order the dates const months = []; while (start.isSameOrBefore(end)) { months.push(start.month() + 1); start.add(1, 'months'); } return months; } console.log(getMonths('2021-04-25', '2021-05-12')); console.log(getMonths('2021-04-25', '2021-08-12')); console.log(getMonths('2021-10-25', '2022-02-12')); console.log(getMonths('2021-04-25', '2022-02-12')); console.log(getMonths('2021-06-26', '2020-02-12'));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda