En la base de datos MySQL: '2020-04-19 22:00:00' (UTC). Eso también es lo que devuelve mi punto final, ya que configuré la opción de conexión dataStrings:true.

En la cliente, después de buscar date:

const timezone = moment.tz.guess();

const convertedDate = moment(date)
   .tz(timezone)
   .format();

convertedDate es igual a "2020-04-19T22:00:00+02:00" (estoy en la zona UTC + 2).

En cambio, me gustaría obtenerlo en el formato "2020-04-20T00: 00: 00". ¿Cómo puedo hacer eso?

1
zaff 28 abr. 2020 a las 13:33

2 respuestas

La mejor respuesta

Parece que moment(date) cree que su valor date entrante es en hora local, no en UTC. Por lo tanto, su conversión de zona horaria a hora local no cambia nada. Puedes decir que moment es UTC, así:

const timezone = moment.tz.guess();

const convertedDate = moment.utc(date)
   .tz(timezone)
   .format();
1
O. Jones 28 abr. 2020 a las 11:01

No necesita zona horaria para esto. Con Moment por sí solo, puede usar la función utc al analizar y la función local para convertir a la zona horaria local del usuario antes de formatear.

moment.utc('2020-04-19 22:00:00').local().format()

//=> "2020-04-20T00:00:00+02:00"

Además, el equipo de Moment recomienda usar Moment solo para proyectos existentes. Para un nuevo desarrollo, recomendamos utilizar Luxon en su lugar:

luxon.DateTime.fromSQL('2020-04-19 22:00:00', {zone: 'utc'}).toLocal().toISO()

//=> "2020-04-20T00:00:00.000+02:00"
1
Matt Johnson-Pint 28 abr. 2020 a las 15:21