Obtengo una cadena de fecha como Fri Sep 17 2021 11:50:59 GMT-0400 (Eastern Daylight Time) de un lugar. Lo recibo de 2021-09-17T11:50:59-04:00 en un segundo lugar.
Quiero convertir el primer formato al segundo.
Estoy haciendo esto de una manera loca, así que estoy pensando que debe haber una mejor.
var d = new Date(`Fri Sep 17 2021 11:50:59 GMT-0400 (Eastern Daylight Time)`); var iso = d.toISOString(); var time = d.toTimeString(); console.log(iso); console.log(time); var [date] = iso.split('T') var [,localTime, timezone] = time.match(/([^ ]+) GMT([^ ]+)/); var timezoneWithColon = timezone.replace(/(-*[0-9]{2,2})([0-9]{2,2})/,"$1:$2") var desiredFormat = '2021-09-17T11:50:59-04:00'; var convertedFormat = `${date}T${localTime}${timezoneWithColon}`; console.log(desiredFormat) console.log(convertedFormat) console.log(desiredFormat === convertedFormat);Se acabó el violín en https://jsfiddle.net/Dave_Stein/8tLv2g4j/ .
2021-09-17T11:50:59-04:00 es una cadena de fecha ISO-8601 .
toISOString debería funcionar, sin embargo, convertirá la hora a UTC. Si desea que esto se formatee en su zona horaria actual, deberá usar una biblioteca como date-fns :
import { formatISO } from 'date-fns' formatISO(new Date(`Fri Sep 17 2021 11:50:59 GMT-0400 (Eastern Daylight Time)`)) // prints '2021-09-17T11:50:59-04:00'