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

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

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