Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

233
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda