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

243
Visualizações
Moment.js fecha incorrecta para el número de semana

Esto debería devolver la última semana del año:

 moment().year('2021').week(51).day('monday').format('YYYY-MM-DD');

Pero en cambio, está regresando 2022-12-12 . Creo que hay un error en moment.js .

Aquí está el código: https://jsfiddle.net/5402bkmp/

about 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Debe usar .isoWeek en lugar de .week (documentado aquí , aunque no me queda claro por qué).

about 4 years ago · Santiago Trujillo Relatório

0

Debe publicar su código aquí, no en otro lugar.

 var now = moment().year('2021').week(51).day('monday').format('YYYY-MM-DD'); console.log(now.toString());
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>

Desglosando el código, si se ejecuta el lunes 27 de diciembre:

 moment()

Crea un objeto de momento para el 27 de diciembre de 2021

 .year('2021')

Establece el año en 2021, lo que no cambia nada porque ya está configurado en 2021. También maneja casos como 2020-02-29 + 1 año, que se convierte en 2021-02-28.

 .week(51)

Se establece en el inicio "localizado" de la semana 51. El problema es, ¿cómo sabe el usuario cómo moment.js localiza las cosas? Para mí, parece ser el domingo 12 de diciembre de 2021. Esa numeración parece estar basada en la primera semana que comienza el primer domingo el 1 de enero de 2021 o antes (es decir, el domingo 27 de diciembre de 2020), por ejemplo, new Date(2020, 11, 27 + 50*7) da 12 de diciembre de 2021.

 .day('monday')

Establece la fecha para el lunes de la misma semana localizada; de nuevo, es difícil para los usuarios saber cuál es su semana "localizada". Para mí, simplemente lo mantiene como lunes porque parece que la semana localizada comienza el domingo (mi PC está configurada para comenzar las semanas el lunes).

 .format('YYYY-MM-DD')

Entonces, creo que está claro que un problema con el uso del método de la semana es que ni el programador ni el usuario saben cuál será el resultado porque no saben qué está usando moment.js para localizar las cosas (posiblemente navigator.language ). Y los resultados pueden ser muy diferentes a lo que se espera.

Una solución, como sugirió Sergiu, es usar isoWeek para que al menos el resultado sea consistente y predecible. Las semanas ISO comienzan el lunes, siendo la primera semana la que tiene más días en el año en cuestión. También se expresa como la semana del primer jueves, o la semana del 4 de enero, todos trabajan para dar el mismo lunes como el inicio de la semana 1 de cualquier año en particular. Algunos años tienen 52 semanas, otros 53 y, por lo general, un par de días cerca del final del año forman parte de la primera semana del año siguiente o la última semana del año anterior.

También le gustaría ver Obtener la semana del año en JavaScript como en PHP .

about 4 years ago · Santiago Trujillo 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