Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

129
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!