Así que soy un aficionado y estoy aprendiendo javascript en línea, pero ahora estoy atascado en algo que estoy intentando.
Obtengo una hora de json en formato UTC (por ejemplo, 16:00:00Z) y quiero ingresar a IST.
var main = function () { json_url = "http://ergast.com/api/f1/current/next.json"; xhr = new XMLHttpRequest(); xhr.open("GET", json_url, false); xhr.send(null); weather = JSON.parse(xhr.responseText); mydate = weather.MRData.RaceTable.Races[0].Qualifying.time; mytime = Date(mydate); mytime = mytime.toLocaleString(); return mytime }Por lo que entendí en línea, intenté agregar
mytime = mytime.toLocaleString();Pero eso devuelve mi día, fecha y hora locales y no la hora de json como pretendía. Cualquier ayuda será apreciada.
Como se señaló en los comentarios, el constructor de fecha llamado como una función simplemente devuelve una cadena para la fecha y hora actuales como si se llamara a new Date().toString() .
No hay "formato UTC". UTC es un estándar de tiempo, el que está buscando es ISO 8601.
La URL devuelve un archivo JSON con la fecha y hora como:
"date":"2022-04-10", "time":"05:00:00Z"El análisis de cadenas con el constructor incorporado es algo problemático, consulte ¿Por qué Date.parse da resultados incorrectos? .
Sin embargo, para convertir la fecha y la hora en una Fecha, puede concatenar las partes para formar una marca de tiempo ISO 8601 válida como:
2022-04-10T05:00:00Zque será analizado correctamente por el analizador incorporado usando el constructor de fecha , por ejemplo
let date = weather.MRData.RaceTable.Races[0].Qualifying.date; let time = weather.MRData.RaceTable.Races[0].Qualifying.time; let mydate = new Date(`${date}T${time}`;Como un fragmento ejecutable:
let obj = {"date":"2022-04-10", "time":"05:00:00Z"}; let date = new Date(`${obj.date}T${obj.time}`); // UTC console.log(date.toISOString()); // Local to host console.log(date.toString()); // In Australia/Melbourne (also contained in the JSON) console.log(date.toLocaleString('en-AU', {timeZone:'Australia/Melbourne', timeZoneName:'short'})); // In India console.log(date.toLocaleString('en-AU', {timeZone:'Asia/Kolkata', timeZoneName:'long'}));No olvide declarar las variables, de lo contrario, se volverán globales (o arrojarán un error en modo estricto).