Transformación de Moment.js a objeto de fecha
Usando Moment.js no puedo transformar un objeto momento correcto a un objeto fecha con zonas horarias. No puedo'obtener la fecha correcta.
Ejemplo:
var oldDate = new Date(),
momentObj = moment(oldDate).tz("MST7MDT"),
newDate = momentObj.toDate();
console.log("start date " + oldDate)
console.log("Format from moment with offset " + momentObj.format())
console.log("Format from moment without offset " + momentObj.utc().format())
console.log("(Date object) Time with offset " + newDate)
console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
615
3
Se utiliza para transformar un objeto de momento en un objeto de fecha:
Desde http://momentjs.com/docs/#/displaying/as-javascript-date/
Rinde:
Mientras hayas inicializado moment-timezone con los datos de las zonas que quieres, tu código funciona como se espera.
Estás convirtiendo correctamente el momento a la zona horaria, lo que se refleja en la segunda línea de salida de
momentObj.format()
.El cambio a UTC no sólo elimina el desplazamiento, sino que vuelve a cambiar a la zona horaria UTC. Si vas a hacer eso, no necesitas la llamada original a
.tz()
. Puedes hacer simplementemoment.utc()
.¿Quizás sólo estás tratando de cambiar la cadena de formato de salida? Si es así, sólo tienes que especificar los parámetros que quieres al método
format
:En cuanto a las dos últimas líneas de tu código, cuando vuelves a un objeto
Date
usandotoDate()
, estás abandonando el comportamiento de moment.js y volviendo al comportamiento de JavaScript. Un objetoDate
de JavaScript siempre se imprimirá en la zona horaria local del ordenador en el que se está ejecutando. No hay nada que moment.js pueda hacer al respecto.Un par de cosas más:
Aunque el constructor de momentos puede tomar una
Fecha
, normalmente es mejor no usarla. Para "now", no usesmoment(new Date())
. En su lugar, utilizamoment()
. Ambos funcionarán pero es innecesariamente redundante. Si estás analizando una cadena, pasa esa cadena directamente a moment. No intentes convertirla en unaFecha
primero. Encontrarás que el analizador de moment es mucho más fiable.Las zonas horarias como
MST7MDT
están ahí por razones de compatibilidad. Provienen de las zonas horarias de estilo POSIX, y sólo algunas de ellas están en los datos de TZDB. A menos que sea absolutamente necesario, debería utilizar una clave comoAmerica/Denver
.El sistema de gestión de la información no funcionó para mí, así que esto es lo que hice:
Espero que esto ayude