Moment.js se transforma en un objeto de fecha

Resuelto vadim.zhiltsov asked hace 11 años • 11 respuestas

Al usar Moment.js, no puedo transformar un objeto de momento correcto en un objeto de fecha con zonas horarias. No consigo 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())
vadim.zhiltsov avatar Aug 01 '13 14:08 vadim.zhiltsov
Aceptado

Utilice esto para transformar un objeto de momento en un objeto de fecha:

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

moment().toDate();

Rendimientos:

Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
Chandrew avatar Nov 04 '2014 20:11 Chandrew

Siempre que haya inicializado la zona horaria momento con los datos de las zonas que desea , su código funciona como se esperaba.

Estás convirtiendo correctamente el momento a la zona horaria, lo que se refleja en la segunda línea de salida de momentObj.format().

Cambiar a UTC no solo elimina el desplazamiento, sino que vuelve a la zona horaria UTC. Si va a hacer eso, no necesita la .tz()llamada original en absoluto. Podrías simplemente hacerlo moment.utc().

¿Quizás solo estás intentando cambiar la cadena de formato de salida? Si es así, simplemente especifique los parámetros que desea para el formatmétodo:

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

Con respecto a las últimas líneas de su código, cuando regresa a un Dateobjeto usando toDate(), está abandonando el comportamiento de moment.js y volviendo al comportamiento de JavaScript. Un objeto JavaScript Datesiempre se imprimirá en la zona horaria local de la computadora en la que se ejecuta. No hay nada que moment.js pueda hacer al respecto.

Un par de pequeñas cosas más:

  • Si bien por el momento el constructor puede tomar un Date, generalmente es mejor no usarlo. Para "ahora", no utilices moment(new Date()). En su lugar, simplemente use moment(). Ambos funcionarán pero es innecesariamente redundante. Si está analizando una cadena, pase esa cadena directamente al momento. No intentes analizarlo por Dateprimera vez. Descubrirá que el analizador de momentos es mucho más confiable.

  • Las zonas horarias como MST7MDTestán ahí por razones de compatibilidad con versiones anteriores. Provienen de zonas horarias de estilo POSIX y solo unas pocas de ellas están en los datos de TZDB. A menos que sea absolutamente necesario, debería utilizar una clave como America/Denver.

Matt Johnson-Pint avatar Aug 01 '2013 13:08 Matt Johnson-Pint

.toDateRealmente 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

Mawaheb avatar Mar 13 '2015 10:03 Mawaheb

Como momentjs no tiene control sobre el objeto de fecha de JavaScript, encontré una solución alternativa a esto.

const currentTime = new Date();    
const convertTime = moment(currentTime).tz(timezone).format("YYYY-MM-DD HH:mm:ss");
const convertTimeObject = new Date(convertTime);
Expandir fragmento

Esto le dará un objeto de fecha de JavaScript con la hora convertida.

Yasith Prabuddhaka avatar Sep 26 '2018 04:09 Yasith Prabuddhaka