Estoy haciendo una aplicación en nodejs y las fechas son un dolor de cabeza.
Estoy usando el momento para controlarlo, pero algo me está fallando. cuando hago moment().getDate()
para obtener la fecha y hora actual, esto devuelve la fecha del servidor donde se está ejecutando y no quiero eso. Necesito configurar la zona horaria de Mexico por defecto, si no me equivoco es 'America / Mexico_city'
nunca lo he hecho asi que leyendo encontre esta instruccion
moment().utcOffset(-360).format('YYYY-MM-DD HH: mm: ss');
Esto me devuelve correctamente la fecha y la hora actuales, pero es una cadena, y mi modelo de base de datos no acepta cadenas, sino tipos de fecha. (Estoy usando MongoDB y mongoose), por lo que es incompatible para guardar.
Intenté hacer new Date (moment().UtcOffset(-360).format ('YYYY-MM-DD HH: mm: ss'))
pero vuelve a la fecha del servidor.
Soy un novato con las fechas, así que todas las sugerencias son bienvenidas.
La fecha en JavaScript siempre está en milisegundos desde el 1 de enero de 1970 UTC. moment es un contenedor que facilita el análisis y la manipulación de fechas de JavaScript. No importa si usa el momento para crearlos, las fechas siempre están en UTC.
Cuando configura utcOffset en el momento, no cambia la hora UTC interna del momento, solo usa esa configuración al formatear.
const now = Date.now(); console.log(new Date(now)); // now in UTC formatted in ISO 8601 with special Z time zone indicator console.log(moment(now).format()); // now in UTC formatted in ISO 8601 with offset time zone indicator set to the current system's time zone offset. console.log(moment(now).utcOffset(-360).format()); // now in UTC formatted in ISO 8601 with offset time zone indicator set to UTC-6:00. console.log(moment(now).utcOffset(-360).format('LLLL')); // now in UTC formatted with your locale settings set to UTC-6:00.
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
Ninguno de los métodos utcOffset o de formato cambia la Fecha subyacente utilizada por el momento.
Cuando guarde una fecha en su base de datos, estará en UTC. Tendrá que usar moment (o algún otro formateador) para mostrarlo en la zona horaria que desee. La base de datos no guarda la hora de una forma ambigua que no reconoce la zona horaria. Tampoco almacenará información de zona horaria específica con su fecha.
Podría usar las matemáticas de fecha para restar su compensación a la fecha UTC, pero aún así ahorraría en UTC, solo 6 horas antes. Luego, tendría que agregar esas horas cuando lo sacó de la base de datos. Si hace esto y solo muestra la fecha sin procesar de la base de datos sin volver a agregar las horas, verá el indicador de zona horaria "Z". Esto sería realmente confuso.
También puede guardar su fecha como una cadena en la base de datos. Esto le permitiría guardar una fecha formateada con información de la zona horaria. Luego, tendrá que volver a convertirlo en una fecha para realizar cualquier análisis, formateo, cálculo o validación adicionales.