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'))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();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