Estoy tratando de convertir la cadena 2022-02-01T13:36:57+00:00
en un javascript de objeto de fecha que me devuelve Tue Feb 01 2022 13:36:57
sin tener en cuenta la zona horaria.
Pero cada vez que trato de convertir la fecha, regresa: Tue Feb 01 2022 10:36:57 GMT-0300 (Brasilia Standard Time)
Ya probé con moment: let now = moment("2022-02-01T13:36:57+00:00").toDate();
con fecha: let now = new Date("2022-02-01T13:36:57+00:00");
con UTC también: new Date(Date.UTC(2022, 02, 01, 10, 36, 57))
Pero todos me devuelven la fecha local (hora estándar de Brasilia)
Entonces, la pregunta es:
¿Cómo puedo convertir esta cadena 2022-02-01T13:36:57+00:00
en un objeto Fecha que mantiene el mismo día, hora, etc.?
La marca de tiempo "2022-02-01T13:36:57+00:00" representa un momento único en el tiempo. Si se analiza en un objeto de fecha, creará una instancia de fecha con un valor de tiempo de 1643722617000, que es el desplazamiento en milisegundos desde la época de ECMAScript del 1 de enero de 1970.
El valor de tiempo producido a partir de la marca de tiempo no se ve afectado por la configuración local como:
El método toString predeterminado produce una marca de tiempo para la fecha y la hora equivalentes en la zona horaria del sistema host, normalmente denominada fecha y hora locales. Producirá una fecha y hora diferente para cada host con un desplazamiento diferente, pero todos representarán exactamente el mismo momento en el tiempo.
P.ej
let timestamp = '2022-02-01T13:36:57+00:00'; let date = new Date(timestamp); ['UTC','America/Sao_Paulo','Asia/Kolkata'].forEach( loc => console.log(`${date.toLocaleString('default',{timeZone:loc})} - ${loc}`) )
Si desea que la marca de tiempo se analice como local (y eso solo debe hacerse si sabe lo que está haciendo y tiene una muy buena razón para hacerlo), elimine el desplazamiento y analice el resto:
let timestamp = '2022-02-01T13:36:57+00:00'; let date = new Date(timestamp.substring(0,19)); console.log(date.toString());
Tenga en cuenta que la fecha resultante representa un momento diferente en el tiempo para cada host con un desplazamiento diferente y cada instancia de fecha tendrá un valor de tiempo diferente.
Puede crear una instancia de su propio formateador Intl.DateTimeFormat
o llamar a Date.prototype.toLocaleString()
.
const dateString = '2022-02-01T13:36:57+00:00', date = new Date(dateString), dateFormatter = new Intl.DateTimeFormat('en-US', { timeZone: 'UTC', weekday: 'short', year: 'numeric', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', timeZoneName: 'long', hour12: false }); console.log(`Local date : ${date}`); console.log(` UTC date : ${dateFormatter.format(date).replace(/,/g, '')}`);