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

126
Vistas
JS Fecha no correcta

Tengo algunos problemas con JS Dates.

Estoy pasando una fecha a una función en la que trato de analizarla en un objeto de fecha. Sin embargo, esto no funciona en algunas fechas.

Ejemplo: Paso 31.01.2022 a esta función, creo un nuevo objeto Fecha y establezco Día/Mes, etc. Si imprimo la Fecha después, indica el 3 de enero.

¿Qué me estoy perdiendo aquí?

Código:

 const [editedHours, setEditedHours] = useState([]) //ChangeHandler Input Field const postHours = (e, entry_id, index, date) => { let newArr = [...editedHours] newArr[index] = { entry_id: entry_id, date: date, //format dd.mm.yyyy time: e.target.value //format HH:MM } setEditedHours(newArr) } const pushHours = () => { let pushHoursArr = [] for(let i = 0; i < editedHours.length; i++) { let hour = editedHours[i].time.substr(0, 2) //getHour let minute = editedHours[i].time.substr(3, 2) //getMinute let dateStr = editedHours[i].date.split(".") //Split 31.01.2022 const date = new Date(); date.setDate(dateStr[0]) //31 date.setMonth(dateStr[1] -1) //Month 01 -1 since Month starts at 0 date.setFullYear(dateStr[2]) //2022 date.setHours(hour) date.setMinutes(minute) date.setSeconds(0) console.log(date) //prints out Mon Jan 03.... pushHoursArr.push({ entry_id: editedHours[i].entry_id, date: date }) }

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

0

El problema aquí es el orden de su trabajo:

Primero establece la fecha ahora, pero su fecha existente es hoy (febrero, que solo tiene 28 días)

Entonces, al establecer una fecha del 31 de febrero, se redondea al 3.

 const example = '31.01.2022' let dateStr = example.split(".") const date = new Date(); date.setDate(dateStr[0]) date.setMonth(dateStr[1] - 1) date.setFullYear(dateStr[2]) console.log(date)

Para mostrar cómo esto afecta el resultado, esto es lo que sucede si configura el año, luego el mes y luego el día:

 const example = '31.01.2022' let dateStr = example.split(".") const date = new Date(); date.setFullYear(dateStr[2]) date.setMonth(dateStr[1] - 1) date.setDate(dateStr[0]) console.log(date)

La mejor opción es construir la fecha de una sola vez:

new Date(year, month, day, hours, minutes)

 const example = '31.01.2022' let dateStr = example.split(".") const date = new Date(dateStr[2], dateStr[1] - 1, dateStr[0]) console.log(date)

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