Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

138
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!