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

229
Vistas
Cómo iterar el número de semana, la fecha de inicio/finalización de las semanas usando el momento

¿Cómo puedo obtener week number , from/to date de un mes específico?

El siguiente código es lo que construyo para mostrar week number , from/to date de un mes específico y devuelve un bucle infinito cada vez que inserto la función dentro del bucle.

 function getISOWeeksInMonth(month, year) { let weekStart = new Date(year, month - 1, 1); weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) + 1); let weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); let weekNum = moment(weekStart, "YYYY-MM-DD").week() let weeks = []; do { weeks.push({ weekNum : weekNum++, start: new Date(weekStart), end: new Date(weekEnd) }); weekStart.setDate(weekStart.getDate() + 7); weekEnd.setDate(weekEnd.getDate() + 7); } while (weekStart.getMonth() < month); return weeks; } _.forEach(moment.months(), function (month_name) { var month_number = moment().month(month_name).format("MM"); getISOWeeksInMonth(month_number, 2022).forEach(week => console.log( 'Week : ' + week.weekNum + '\nStart: ' + week.start.toDateString() + '\nEnd : ' + week.end.toDateString()) ); })

El resultado debe devolver la lista el week number , from/to date
Ejemplo de URL: https://savvytime.com/week-number/philippines/2022

Aquí está la muestra cuando ejecuto la función fuera del bucle:

 function getISOWeeksInMonth(month, year) { let weekStart = new Date(year, month - 1, 1); weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) + 1); let weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); let weekNum = moment(weekStart, "YYYY-MM-DD").week() let weeks = []; do { weeks.push({ weekNum : weekNum++, start: new Date(weekStart), end: new Date(weekEnd) }); weekStart.setDate(weekStart.getDate() + 7); weekEnd.setDate(weekEnd.getDate() + 7); } while (weekStart.getMonth() < month); return weeks; } getISOWeeksInMonth(1, 2022).forEach(week => console.log( 'Week : ' + week.weekNum + '\nStart: ' + week.start.toDateString() + '\nEnd : ' + week.end.toDateString()) );
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>

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

0

 function getISOWeeksInMonth(month, year) { let weekStart = new Date(year, month - 1, 1); weekStart.setDate(weekStart.getDate() - (weekStart.getDay() || 7) + 1); let weekEnd = new Date(weekStart); weekEnd.setDate(weekEnd.getDate() + 6); let weeks = []; do { let weekNum = moment(weekStart, "YYYY-MM-DD").week() weeks.push({ weekNum : weekNum, start: new Date(weekStart), end: new Date(weekEnd) }); weekStart.setDate(weekStart.getDate() + 7); weekEnd.setDate(weekEnd.getDate() + 7); } while (weekStart.getMonth() < month && (weekStart.getMonth() || (month < 12) )); return weeks; } let _ = moment.months() _.forEach(function (month_name) { var month_number = moment().month(month_name).format("MM"); getISOWeeksInMonth(month_number, 2022).forEach(week => console.log( 'Week : ' + week.weekNum + '\nStart: ' + week.start.toDateString() + '\nEnd : ' + week.end.toDateString()) ); })
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.2/moment.min.js"></script>

Cuando calcula las semanas en diciembre (mes 12), comienza con la última semana del mes anterior (noviembre, es decir, 11), y en su ciclo do {...} while while, agrega 7 días a weekStart . Hasta aquí todo bien, pero tu while (weekStart.getMonth() < month) está verificando el valor 0-11 de weekStart.getMonth() , y cuando avanza desde 11, en lugar de ir a 12, va a 0. Entonces siempre es menos de 12 (¡diciembre!)!

Puedes arreglar esto ajustando tu while a:

 while (weekStart.getMonth() < month && (weekStart.getMonth() || (month < 12) ))
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