cómo mostrar la fecha del campo createdAt según la zona horaria local. Lo he intentado, solo funciona para localhost cuando lo cargo en el servidor, muestra el formato UTC de datos de campo createdAt.
aquí está mi código
dateFormatwithSec(date_time) { const testDateUtc = moment.utc(date_time); const localDate = moment(testDateUtc).local(); return localDate.format('YYYY-MM-DD HH:mm:ss'); },por qué no proporciona la salida correcta en el servidor.
Esto no es una respuesta, es realmente un comentario extenso. El OP debe incluir una cadena de fecha_hora de ejemplo, el resultado real y el resultado esperado en el OP, no en los comentarios.
Hasta que eso se sepa, nadie puede entender lo que significa " no proporciona la salida correcta en el servidor ".
Aquí hay una explicación de lo que está sucediendo, espero que ayude.
El método utc de Moment hace que muestre las marcas de tiempo como UTC. Para el análisis, hace que use UTC solo si no hay una compensación en la marca de tiempo. Entonces, dada una marca de tiempo como "2021-12-02 15:15:33", devolverá un objeto de momento con una Fecha que tiene un valor de tiempo equivalente a 2021-12-02T15:15:33+00:00.
El método local hace que moment muestre la fecha en la zona horaria local. Tenga en cuenta que "local" significa según la configuración del sistema, no la ubicación real del sistema.
Considere lo siguiente, donde se agregó el token Z para mostrar el desplazamiento que ese momento está usando para los objetos:
function dateFormatwithSec (date_time) { // Set moment to UTC mode and parse the input string as UTC let testDateUtc = moment.utc(date_time); console.log('testDateUtc: ' + testDateUtc.format('YYYY-MM-DD HH:mm:ss Z')); // Set the moment object to local mode and return a formatted date let localDate = moment(testDateUtc).local(); return localDate.format('YYYY-MM-DD HH:mm:ss Z'); } let ts = '2021-12-02 15:15:33+04:00'; console.log('localDate : '+ dateFormatwithSec(ts)); <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>PD. Al analizar cadenas, siempre es mejor proporcionar también el formato, por lo que:
moment.utc(date_time, 'YYYY-MM-DD HH:mm:ss')se prefiere. También permite a los mantenedores ver el formato esperado (aunque también debería estar en la documentación). Incluso cambios muy pequeños en el formato harán que el momento vuelva al analizador integrado de la implementación, por ejemplo, '2021-12-02 15:15:33+04:00' frente a '2021-12-02 15:15:33 +04:00'.
Encontré una solución simple tomando una idea de RobG. me esta funcionando perfectamente. lo que hice.
function dateFormatwithSec (date_time) { const dateutc = date_time.replace('Z', ''); // console.log(dateutc); const dt = new Date(`${dateutc}Z`); const finaldate = moment(dt).format('L, h:mm ss a'); //display local time with moment console.log( "local time is - " , finaldate) return finaldate ; } let ts = '2021-12-03T18:34:17.000Z'; dateFormatwithSec(ts); "local time is - ", "12/04/2021, 12:04 17 am"