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

122
Vistas
Las fechas no se incrementan correctamente

Tengo una función que, cuando se llama, agregará 7 días a la fecha ingresada. El formato de la fecha es AAAA-MM-DD (es decir, 2022-03-02)

 for(let i = 0; i < repeatCount; i++) { date = addWeek(date); } function addWeek(date) { let temp = new Date(date); //console.log("Old Date: "); //console.log(temp.toISOString().split('T')[0]) //console.log(temp.getDate()); temp.setDate(temp.getDate() + 7); console.log("New Date: "); console.log(temp.toISOString().split('T')[0]) //console.log("returning date"); return temp.toISOString().split('T')[0]; }

Por alguna razón, cuando se llama a la función como parte de una repetición (aplicación web React que involucra eventos recurrentes), la función addWeek no se incrementará correctamente una sola vez, pero luego se incrementará correctamente el resto del tiempo.

Aquí está la entrada de mi registro más reciente cuando configuré repeatCount en 5:

 Old Date: 2022-03-04 New Date: 2022-03-11 Old Date: 2022-03-11 New Date: 2022-03-17 Old Date: 2022-03-17 New Date: 2022-03-24 Old Date: 2022-03-24 New Date: 2022-03-31 Old Date: 2022-03-31 New Date: 2022-04-07

Como probablemente hayas notado, incrementa la semana correctamente con la excepción de la segunda repetición. He probado esto varias veces con diferentes fechas, y cada vez, es solo la segunda iteración la que se incrementa incorrectamente. Todo lo demás funciona bien.

Por favor ayuda. Estoy perdiendo la cabeza por esto.

Olvidé agregar antes: addWeek toma la fecha como una entrada de cadena.

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

0

Este es un problema del horario de verano. Las fechas en JavaScript son inherentemente locales, por lo que cuando usa setDate() intenta mantener la misma hora del día en la nueva fecha, teniendo en cuenta los cambios en el horario de verano. Pero eso significa que la hora del día será diferente en comparación con la hora UTC (a la que se convierte toISOString() ). El valor real de la temp en la segunda salida de su ejemplo es 2022-03-17T23:00Z , una hora antes de la fecha que estaba buscando. Pero su código elimina el elemento de tiempo para que termine con un día libre.

En lugar de usar setDate() , use el constructor de fecha:

 temp = new Date(temp.getFullYear(), temp.getMonth(), temp.getDate() + 7); 

 var date = new Date('2022-03-02'); const repeatCount = 5; for(let i = 0; i < repeatCount; i++) { date = addWeek(date); } function addWeek(date) { let temp = new Date(date); temp = new Date(temp.getFullYear(), temp.getMonth(), temp.getDate() + 7); console.log("New Date: ", temp); console.log(temp.toISOString().split('T')[0]) //console.log("returning date"); return temp.toISOString().split('T')[0]; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

https://jsfiddle.net/4wm1vz9d/1/

 function addWeek(date) { date.setDate(date.getDate()+7) } let date = new Date(); console.log(date) for(let i = 0; i < 5; i++) { addWeek(date) console.log(date) }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Uf. Javascript es a veces raro. Parece que la fecha es inexacta debido a la conversión a una cadena ISO. Intente devolver el objeto de fecha temporal en lugar de la cadena. Luego conviértalo después de agregar las semanas. Puede tener algo que ver con los otros valores que proporciona el Objeto...

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