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

296
Vistas
El campo de fecha de formato Moment.js a un día antes de lo que debería

Este es un pequeño error muy pequeño que estoy tratando de corregir en mi código. Tengo un componente React con este estado inicial

 const initialFormData = Object.freeze({ date: Moment(new Date()).format('YYYY-MM-DD'), price_per_gallon: '', trip_distance: '', gallons: '', car: '' }); const [formData, updateFormData] = useState(initialFormData);

Que se usa en una forma como esta:

 <MuiPickersUtilsProvider utils={DateFnsUtils}> <Grid container justifyContent="space-around"> <KeyboardDatePicker fullWidth disableToolbar inputVariant="outlined" format="yyyy-MM-dd" margin="normal" id="date-picker-inline" label="Date of Fillup" name="date" value={formData.date} onChange={handleDateChange} KeyboardButtonProps={{ 'aria-label': 'change date', }} /> </Grid> </MuiPickersUtilsProvider>

Hice console.logs para ver que Moment(new Date()).format('YYYY-MM-DD') muestra la fecha de hoy, como quiero, pero por alguna razón, cuando el componente muestra, tiene la fecha predeterminada en el campo como ayer ingrese la descripción de la imagen aquí , pero si tuviera que deshacerme de la inicialización de la fecha con la instancia de Moment y solo hacer que sea 'nueva Fecha ()', se representa correctamente con la fecha de hoy.

¿Alguna idea de por qué podría ser esto? Me estoy destrozando el cerebro aquí, solo quiero que la fecha predeterminada en mi formulario sea el día actual, y necesito formatearlo en AAAA-MM-DD porque así es como mi API envía y recibe los datos.

Editar: aquí hay tres console.logs que he probado:

 console.log(new Date()); console.log(Moment(new Date()).format('YYYY-MM-DD')); console.log(Moment().format('YYYY-MM-DD'));

y sus resultados:

 Wed Feb 09 2022 22:01:41 GMT-0500 (Eastern Standard Time) 2022-02-09 2022-02-09

Pero por alguna razón, los dos segundos que usan Moment harán que el componente se muestre con la fecha de ayer.

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

0

Primero, puede eliminar el simple JS new Date() como argumento al momento.

 date: moment().format('YYYY-MM-DD')

No se necesita ningún argumento para que moment tenga un objeto de momento para la hora local. Es el predeterminado ;)

Luego, como se menciona en los comentarios de Vengleab SO, está pasando esa fecha a KeyboardDatePicker que (muy probablemente) asume que es una fecha UTC y "elimina" su compensación de tiempo. Eso explicaría por qué la fecha es ayer cuando se prueba entre las 19:00 y la medianoche (su hora local GMT-5).

Así que... Pasar un tiempo a lo largo de la fecha debería solucionar el problema.

 date: moment().format('YYYY-MM-DD 12:00:00')
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