He estado trabajando con una API que devuelve el tiempo en un desplazamiento UTC como '7000' en segundos, estoy tratando de pasar a una fecha como '2020-01-01T01: 56: 40.000Z' o tiempo como '1:12 :03 PM'
He intentado esto pero devuelve una fecha incorrecta, como si le estuviera dando un valor en ms.
var utcSeconds = 7000; var d = new Date(7000); console.log(d); // 1970-01-01T00:00:07.000ZTodo lo que he podido ver en línea es el procedimiento opuesto o un procedimiento diferente, espero que me puedan ayudar, ¡Gracias!
Una forma de hacer esto es encontrar una zona horaria canónica de IANA que coincida con el desplazamiento UTC que obtiene de la API. Estos se ven como 'Etc/GMT-9' y tienen un desplazamiento UTC fijo. (Consulte List of tz database timezones )
Una vez que tengamos esta zona horaria, podemos usar Date.toLocaleTimeString() para formatear la hora local.
Podemos envolver todo esto en una función formatLocalTime() que mostrará la hora en ese desplazamiento UTC.
function getIANATimezone(utcOffsetSeconds) { const utcOffsetHours = Math.abs(utcOffsetSeconds / 3600); const sign = (utcOffsetSeconds < 0 ) ? '+': '-'; return `Etc/GMT${sign}${utcOffsetHours}`; } function formatLocalTime(utcOffsetSeconds) { const timeZone = getIANATimezone(utcOffsetSeconds); return new Date().toLocaleTimeString('en-US', { timeZone }); } const utcOffsets = [32400,-25200, 0, 3600]; console.log('UTC Offset(s)\tLocal time') for(let utcOffset of utcOffsets) { console.log(utcOffset + '', '\t\t', formatLocalTime(utcOffset)) } .as-console-wrapper { max-height: 100% !important; }