Estoy tratando de mostrar el momento actual en diferentes zonas horarias. Intenté usar javascript nativo y el paquete moment-js, pero parece que necesita el nombre de la zona horaria (por ejemplo, "América/Toronto") para mostrar la información que quiero. El problema es que la información que tengo actualmente es la marca de tiempo en formato de cadena (consulte a continuación el formato de cadena) de la zona horaria deseada y la ciudad a la que pertenece la marca de tiempo. El problema de usar la ciudad para crear mi valor tz es que una de las ciudades que quiero mostrar no está en la base de datos tz de la IANA (Calgary).
Marca de tiempo de cadena:
2022-04-26T14:19:42.8430964-04:00
Como se puede ver, tengo la compensación de tiempo y esperaba que hubiera una manera de convertir esta cadena en js en un objeto de Fecha y luego mostrar la hora usando la compensación en la zona horaria correcta.
Tenga en cuenta que lo que quiero mostrar es el siguiente formato:
12:19 p. m. MT
Sé que podría analizar la cadena, pero siento que esta no es la mejor práctica, sin embargo, puedo estar equivocado.
También tenga en cuenta que tendré que obtener la zona horaria (por ejemplo, MT, ET, también puede ser MST, EST) usando el desplazamiento.
no necesitas momento aquí. JS puede hacer esto de forma nativa. Además, el momento ahora está en desuso .
Su zona horaria IANA es America/Edmonton . Así que es simple de hacer. Ese formato de fecha es un formato de fecha ISO 8601, por lo que puede pasarlo al new Date y lo analizará correctamente:
const iso8601 = '2022-04-26T14:19:42.8430964-04:00'; const date = new Date(iso8601); console.log(date.toLocaleString('en-US', { timeZone: 'America/Edmonton' })); No importa en qué zona horaria esté configurada la fecha de entrada, siempre que tenga el desplazamiento correcto en la fecha ISO. Una vez que es una Date , el desplazamiento es irrelevante. P.ej:
const iso8601 = '2022-04-26T14:19:42.8430964Z'; const date = new Date(iso8601); //time will now be 4 hours off above as the input date is UTC console.log(date.toLocaleString('en-US', { timeZone: 'America/Edmonton' }));