Usando Moment.js no puedo transformar un objeto de momento correcto en un objeto de 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())
javascript
momentjs
vadim.zhiltsov
fuente
fuente
Wednesday 24th 2019, 12:47:48 am
¿Es esto posible convertir2019-04-23T19:17:48.000Z
? @ vadim.zhiltsov.tz("MST7MDT")
. Es por eso que existen bibliotecas como moment.tz, para complementar la capacidad básica del objeto Date incorporado que solo comprende UTC y la zona horaria del host, eso es todo.Respuestas:
Use esto para transformar un objeto de momento en un objeto de fecha:
Desde http://momentjs.com/docs/#/displaying/as-javascript-date/
Rendimientos:
fuente
toDate
hecho , es cómo obtener unDate
objeto de amoment
. Pero el código en el cuerpo de la pregunta pregunta sobre la conversión de zona horaria, queDate
no puede hacer. A menos que el tiempo de montaña sea la zona horaria del usuario, entonces no estoy seguro de cómo respondió esta pregunta.moment("12/12/2011")
es donde obtendría ese mensaje. No tiene nada que ver con ir de momento a momento objmoment().toDate()
Siempre que haya inicializado la zona horaria de momento con los datos de las zonas que desee , 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()
.Cambiar a UTC no solo elimina el desplazamiento, sino que vuelve a cambiar a la zona horaria UTC. Si va a hacer eso, no necesita la
.tz()
llamada original en absoluto. Podrías simplemente hacermoment.utc()
.¿Quizás solo está tratando de cambiar la cadena de formato de salida? Si es así, solo especifique los parámetros que desea para el
format
método:Con respecto a las últimas líneas de su código: cuando regresa a un
Date
objeto usandotoDate()
, abandona el comportamiento de moment.js y vuelve al comportamiento de JavaScript. Un JavaScriptDate
objeto siempre se imprimirá en la zona horaria local de la computadora en la que se está ejecutando. No hay nada moment.js puede hacer al respecto.Un par de otras pequeñas cosas:
Si bien el momento en que el constructor puede tomar un
Date
, generalmente es mejor no usar uno. Para "ahora", no lo usemoment(new Date())
. En cambio, solo utilícelomoment()
. Ambos funcionarán pero es innecesariamente redundante. Si está analizando desde una cadena, pase esa cadena directamente al momento. No intentes analizarlo porDate
primera vez. Encontrará que el analizador de momentos es mucho más confiable.Las zonas horarias como
MST7MDT
están allí por razones de compatibilidad con versiones anteriores. Provienen de zonas horarias de estilo POSIX, y solo unos pocos están en los datos TZDB. A menos que sea absolutamente necesario, debe usar una clave comoAmerica/Denver
.fuente
.toDate()
. 2) No use comentarios para hacer nuevas preguntas. Para eso está el gran botón "Hacer pregunta" ..toDate
realmente no funcionó para mí, entonces, esto es lo que hice:espero que esto ayude
fuente
moment().add(1, 'd').toDate()
.Como momentjs no tiene control sobre el objeto de fecha de JavaScript, encontré una solución para esto.
Esto le dará un objeto de fecha de JavaScript con el tiempo convertido
fuente
Necesitaba tener información de zona horaria en mi cadena de fecha. Originalmente estaba usando,
moment.tz(dateStr, 'America/New_York').toString();
pero luego comencé a recibir errores sobre cómo volver a alimentar esa cadena en el momento.Probé
moment.tz(dateStr, 'America/New_York').toDate();
pero luego perdí la información de zona horaria que necesitaba.La única solución que devolvió una cadena de fecha utilizable con zona horaria que podría retroalimentarse en ese momento fue
moment.tz(dateStr, 'America/New_York').format();
fuente
¡¡¡¡bonito y limpio!!!!
fuente
Para convertir cualquier fecha, por ejemplo, utc:
fuente
moment().utc()
devuelve valores para UTC, luego.format( "YYYY-MM-DD HH:mm:ss" )
devuelve una cadena que se ha establecido en UTC sin un desplazamiento de zona horaria, por lo que se analiza como local. No coincide con un formato de momento predeterminado, por lo que el analizador incorporado lo analiza. Tampoco coincide con ningún formato compatible con ECMAScript, por lo que el análisis depende de la implementación. De todos modos, se analiza como local, por lo que el desplazamiento de la zona horaria se aplica nuevamente al crear el valor de la fecha.La pregunta es un poco oscura. Haré todo lo posible para explicar esto. Primero debes entender cómo usar momentzone . De acuerdo con esta respuesta aquí, TypeError: moment (). Tz no es una función , debe importar el momento desde el momento-zona horaria en lugar del momento predeterminado (por supuesto, ¡primero tendrá que instalar npm momento-zona horaria!). Por el bien de la claridad,
Ahora, para usar la función de zona horaria, use moment.tz ("date_string / moment ()", "time_zone") (visite https://momentjs.com/timezone/ para obtener más detalles). Esta función devolverá un objeto de momento con una zona horaria particular. Por el bien de la claridad,
Ahora, cuando intente convertir newYork (el objeto de momento) con toDate () (conversión de formato ISO 8601), obtendrá la hora de Greenwich, Reino Unido. Para obtener más detalles, consulte este artículo https://www.nhc.noaa.gov/aboututc.shtml , sobre UTC. Sin embargo, si solo desea que su hora local esté en este formato (hora de Nueva York, según este ejemplo), simplemente agregue el método .utc (verdadero) , con el argumento verdadero , a su objeto de momento. Por el bien de la claridad,
En resumen, moment.tz considera la zona horaria que especifica y compara su hora local con la hora en Greenwich para obtener un resultado. Espero que esto haya sido útil.
fuente
moment ha actualizado js lib a partir del 06/2018.
si tiene libertad para usar Angular5 +, mejor use la función datePipe allí que la función de zona horaria aquí. Tengo que usar moment.js porque mi proyecto se limita solo a Angular2.
fuente
probar (sin
format
paso)Mostrar fragmento de código
fuente
new Date(moment())
es equivalente anew Date()
. La zona horaria solo se establece para d .