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())
Solución

Se utiliza para transformar un objeto de momento en un objeto de fecha:

Desde http://momentjs.com/docs/#/displaying/as-javascript-date/

moment().toDate();

Rinde:

Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
Comentarios (7)

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 simplemente moment.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:

momentObj.format("YYYY-MM-DD HH:mm:ss")

En cuanto a las dos últimas líneas de tu código, cuando vuelves a un objeto Date usando toDate(), estás abandonando el comportamiento de moment.js y volviendo al comportamiento de JavaScript. Un objeto Date 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 uses moment(new Date()). En su lugar, utiliza moment(). Ambos funcionarán pero es innecesariamente redundante. Si estás analizando una cadena, pasa esa cadena directamente a moment. No intentes convertirla en una Fecha 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 como America/Denver.

Comentarios (4)

El sistema de gestión de la información no funcionó para mí, así que esto es lo que hice:

futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))

Espero que esto ayude

Comentarios (0)