Tengo valores DateTime específicos en este formato ' YYYY-MM-DDThh:mm:ss.ms ' (por ejemplo, ' 2022-05-10T13:44:00.0000000 ') y necesito convertirlos a DateTime local (que es UTC+2 para mí) sin cambiar el formato (entonces ' 2022-05-10T15:44:00.0000000 ' es el resultado deseado (aún mejor sería sin los milisegundos, pero eso sería solo la guinda del pastel)).
He buscado por todas partes, pero cada supuesta solución que encuentro cambia el formato o no cambia la hora en absoluto.
Esto es lo que tengo ahora, convierte con éxito la hora a la hora local, pero al ejecutarlo a través de .toISOString() para recuperar el formato original, lo vuelve a convertir a la hora UTC.
//Input: event.start.dateTime = '2022-05-10T13:44:00.0000000' let startDateTime = new Date(event.start.dateTime); startDateTime.setMinutes(startDateTime.getMinutes() - startDateTime.getTimezoneOffset()); document.getElementById('ev-start').value = startDateTime.toISOString().slice(0,16); //Output: '2022-05-10T13:44:00.000Z'No pude encontrar una solución limpia y satisfactoria, así que decidí formatear yo mismo. Esto es lo que terminé con:
Entrada: ' 2022-05-10T13:44:00.0000000 '
let startDateTime = new Date(event.start.dateTime); startDateTime.setMinutes(startDateTime.getMinutes() - startDateTime.getTimezoneOffset()); let localStartDateTime = startDateTime.getFullYear() + "-" + (startDateTime.getMonth() + 1).toString().padStart(2, '0') + "-" + startDateTime.getDate().toString().padStart(2, '0') + "T" + startDateTime.getHours().toString().padStart(2, '0') + ":" + startDateTime.getMinutes().toString().padStart(2, '0') + ":" + startDateTime.getSeconds().toString().padStart(2, '0'); document.getElementById('ev-start').value = localStartDateTime;Salida: ' 2022-05-10T15:44:00 '
Espero que esto ayude
const startDateTime = new Date('2022-05-10T13:44:00.0000000'); const outputDateTime = new Date(startDateTime.toString()).toISOString().slice(0, 19); //document.getElementById('ev-start').value = outputDateTime console.log(outputDateTime);