Estoy convirtiendo una marca de tiempo en un objeto DB usando moment :
{moment(comment.created_at).local(true).format('h:mm a')} Mi tiempo se emite en tiempo UTC porque así es como se crea en mi base de datos. Así que veo '6:45 p. m.', por ejemplo, cuando quiero ver la hora en MI zona horaria (EST) o la zona horaria relativa del usuario. ¿De acuerdo con el momento en que docs local() se convertirá a su zona horaria actual? Llamar al método local() como se muestra en mi código anterior no cambia la zona horaria. ¿Estoy usando esto incorrectamente?
Mi objeto DB
{ client_id: 24 created_at: "2022-02-11 17:41:39.330443" id: 22 report: "sfsf" report_category: "Client Assigned" volunteer_id: 23 }Su base de datos está almacenando la fecha sin un indicador de compensación. Esto significa que ese momento no puede determinar automáticamente la zona horaria. Según la documentación sobre las fechas de análisis :
momento (...) es el modo local. Se supone que la entrada ambigua (sin desplazamiento) es la hora local. La entrada inequívoca (con desplazamiento) se ajusta a la hora local. * moment.utc(...) es el modo utc. Se supone que la entrada ambigua es UTC.
Entonces, si sabe que su entrada es UTC y sabe que no tendrá un indicador de compensación, use moment.utc() en lugar de moment() .
Además, no desea utilizar local(true) , ya que pasar "true" solo cambiará la zona horaria en el objeto sin cambiar la hora (consulte la documentación ). Así que te queda:
{moment.utc(comment.created_at).local().format('h:mm a')}Convertí su marca de tiempo DB en formato ISO y luego pasé a su implementación
let t = "2022-02-11 17:41:39.330443" let utcISOTimestamp = moment.utc(t).toDate() console.log(utcISOTimestamp) //let res = moment(utcISOTimestamp).local(true).format('h:mm a'); let res = moment(moment.utc(t).toDate()).local(true).format('h:mm a'); console.log(res) <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>Intenta usar:
moment.utc('2022-02-11 17:41:39').local().format('YYYY-MM-DD HH:mm:ss')