Supongamos que un usuario selecciona la hora 7:00 a. m. como hora y la zona horaria como "África/Blantyre". Quiero crear un objeto de fecha tal que el valor contenga las 7:00 a. m. de "África/Blantyre" y cuando el usuario cambie la zona horaria a "Asia/Jakarta", el valor que se capturó para las 7:00 a. m. "África/Blantyre" " debe ser de la zona horaria "Asia/Jakarta". No debe ser 7:00 AM "Asia/Jakarta" sino el valor convertido de "Africa/Blantyre".
Simplemente puede almacenar la hora como una marca de tiempo de UNIX (número de segundos desde la época de UNIX (1 de enero de 1970), esto es independiente de la zona horaria) y almacenar la zona horaria actual del usuario de forma independiente. Luego, antes de mostrar la hora al usuario, la convierte de la marca de tiempo UNIX a su propio formato de zona horaria, por ejemplo, con Date.prototype.toLocaleString() .
Solo tenga cuidado getTime() devuelve milisegundos desde la época de UNIX, por lo que es la marca de tiempo de UNIX * 1000.
const d1 = (new Date("2022-04-22 3:00 PM UTC+1")).getTime() // UTC+1 timezone // store d1 const d2 = (new Date(d1)).toLocaleString('en-US', { timeZone: 'UTC' }) // UTC timezone console.log(d2)