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

137
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 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