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

139
Views
Objeto de fecha de Javascript que devuelve el primer día del mes incorrecto

Estoy usando el siguiente código en una aplicación React para obtener el primer día del mes (para establecer los valores predeterminados para un componente selector de fecha).

 let date = new Date(); let firstDay = new Date(date.getFullYear(), date.getMonth(), 1).toISOString().slice(0, 10);

Por alguna razón hoy, el 1 de abril, regresa el 31 de marzo. Probé en la consola Chrome y en varias otras herramientas de tiempo de ejecución de JS en línea y algunas regresaron el 31-03-2022 y otras regresaron el 01-04-2022. ¿Se me escapa algo?

Editar:

Mi problema principal era que necesitaba un formato AAAA-MM-DD en la zona horaria local del usuario. El uso .toISOString proporciona la zona horaria UTC y no puedo encontrar una solución que evite esto. Estoy usando la siguiente solución (ayudada por la respuesta de Mac):

 let date = new Date(); let firstDayCopy = String(date.getDate()).padStart(2, '0') + '-' + String(date.getMonth() + 1).padStart(2, '0') + '-' + date.getFullYear(); let firstDay = firstDayCopy.split("-").reverse().join("-");

Edición 2:

O, por supuesto, simplemente invierta el orden para obtener:

 let firstDay = String(date.getFullYear() + '-' + String(date.getMonth() + 1).padStart(2, '0') + '-' + String(date.getDate()).padStart(2, '0'))
about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Prueba esto:

 let date = new Date(); let firstDay = date.getDate() + '-' + (date.getMonth()+ 1) + '-' + date.getFullYear();

o esto, si desea tener el formato de resultado con '0':

 let date = new Date(); let firstDay = String(date.getDate()).padStart(2, '0') + '-' + String(date.getMonth()+ 1).padStart(2, '0') + '-' + date.getFullYear();
about 4 years ago · Juan Pablo Isaza Report

0

Como dijo robertklep, la zona horaria juega un papel importante en las fechas.

El problema con su resultado está enmascarado por el hecho de que está cortando la parte de la fecha de ISOString. Es probable que vea la cadena completa como:

"2022-03-31T23:00:00.000Z".

¿Observa que la hora es 1 hora antes que la hora local? Esto está en línea con UTC. y se debe a mi zona horaria actual que se compensa en 1 hora.

Si no le preocupa la zona horaria, simplemente use: .toLocaleDateString();

 let date = new Date(); let firstDay = new Date(date.getFullYear(), date.getMonth(), 1); console.log("ISO-8601", firstDay.toISOString()); console.log("Local String:", firstDay.toLocaleDateString("en-GB"));

también puede usar .toLocaleDateString("en-US") dependiendo del formato

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!