javascript - examples - Moment.js transformar en objeto de fecha
moment to string (6)
Dado que momentjs no tiene control sobre el objeto de fecha javascript, encontré una solución para esto.
const currentTime = new Date();
const convertTime = moment(currentTime).tz(timezone).format("YYYY-MM-DD HH:mm:ss");
const convertTimeObject = new Date(convertTime);
Esto le dará un objeto de fecha javascript con el tiempo convertido
Usando Moment.js no puedo transformar un objeto de momento correcto en un objeto de fecha con zonas horarias. No puedo conseguir 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())
Momento ha actualizado el js lib a partir del 06/2018.
var newYork = moment.tz("2014-06-01 12:00", "America/New_York");
var losAngeles = newYork.clone().tz("America/Los_Angeles");
var london = newYork.clone().tz("Europe/London");
newYork.format(); // 2014-06-01T12:00:00-04:00
losAngeles.format(); // 2014-06-01T09:00:00-07:00
london.format(); // 2014-06-01T17:00:00+01:00
Si tiene libertad para usar Angular5 +, entonces use mejor la función datePipe allí que la función de zona horaria aquí. Tengo que usar moment.js porque mi proyecto se limita a Angular2 solamente.
Necesitaba tener información de la zona horaria en mi cadena de fecha. Originalmente estaba usando moment.tz(dateStr, ''America/New_York'').toString();
pero luego comencé a recibir errores acerca de devolver esa cadena al momento.
Intenté moment.tz(dateStr, ''America/New_York'').toDate();
pero luego perdí la información de la zona horaria que necesitaba.
La única solución que devolvió una cadena de fecha utilizable con la zona horaria que podría ser devuelta al momento fue moment.tz(dateStr, ''America/New_York'').format();
Siempre que haya inicializado moment-timezone con los datos de las zonas que desea , su código funciona como se esperaba.
Está convirtiendo correctamente el momento a la zona horaria, que se refleja en la segunda línea de salida de momentObj.format()
.
El cambio a UTC no solo elimina el desplazamiento, sino que vuelve a la zona horaria UTC. Si vas a hacer eso, no necesitas la .tz()
original .tz()
en absoluto. Usted podría simplemente hacer moment.utc()
.
¿Quizás solo estás tratando de cambiar la cadena de formato de salida? Si es así, simplemente especifique los parámetros que desea para el método de format
:
momentObj.format("YYYY-MM-DD HH:mm:ss")
Con respecto a las últimas líneas de su código, cuando regresa a un objeto Date
utilizando toDate()
, está renunciando al comportamiento de moment.js y vuelve al comportamiento de JavaScript. Un objeto Date
JavaScript siempre se imprimirá en la zona horaria local de la computadora en la que se está ejecutando. No hay nada que el momento pueda hacer al respecto.
Un par de otras pequeñas cosas:
Si bien el momento en que el constructor puede tomar una
Date
, generalmente es mejor no usar una. Para "ahora", no usemoment(new Date())
. En su lugar, simplemente usemoment()
. Ambos funcionarán pero es innecesariamente redundante. Si está analizando desde una cadena, pase esa cadena directamente al momento. No trates de analizarlo a unaDate
primero. Encontrarás el parser de moment para ser mucho más confiable.Las zonas horarias como
MST7MDT
están ahí por razones de compatibilidad hacia atrás. Provienen de zonas horarias de estilo POSIX, y solo algunas de ellas están en los datos de TZDB. A menos que sea absolutamente necesario, debe usar una clave comoAmerica/Denver
.
Use esto para transformar un objeto de momento en un objeto de fecha:
De http://momentjs.com/docs/#/displaying/as-javascript-date/
moment().toDate();
Rendimientos:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
.toDate
realmente no me funcionó, así que, aquí está lo que hice:
futureStartAtDate = new Date(moment().locale("en").add(1, ''d'').format("MMM DD, YYYY HH:MM"))
espero que esto ayude