Probablemente y una respuesta fácil a esto, pero parece que no puedo encontrar una manera de obtener moment.js para devolver una fecha UTC en milisegundos. Esto es lo que estoy haciendo:
var date = $("#txt-date").val(),
expires = moment.utc(date);
¿Alguna idea de lo que estoy haciendo mal?
javascript
momentjs
usuario1956816
fuente
fuente
.utc()
.format()
, que emitiría el valor UTC. No puede cambiar el valor de la fecha interna en sí, porque aDate
ya está rastreando una marca de tiempo UTC. Siempre son solo los métodos llamados los que determinan si emitir UTC o la hora local. El momento es el mismo en ese sentido.Utilizo este método y funciona. ValueOf no me funciona.
fuente
A partir de:
moment.js version 2.24.0
digamos que tiene una entrada de fecha local, esta es la forma correcta de convertir su entrada dateTime o Time a UTC :
var utcStart = new moment("09:00", "HH:mm").utc();
o en caso de que especifique una fecha
var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();
Como puede ver, la salida del resultado se devolverá en UTC:
//You can call the format() that will return your UTC date in a string utcStart.format(); //Result : 2019-06-24T13:00:00
Pero si hace esto como se muestra a continuación, no se convertirá a UTC:
var myTime = new moment.utc("09:00", "HH:mm");
Solo está configurando su entrada a la hora utc, es como si estuviera mencionando que myTime está en UTC, ... la salida será a las 9:00
fuente
es el camino a seguir, ya que
se comporta raro ...
fuente
moment().utc(date).format(...)
?moment.utc(date)
es para analizar eldate
. El segundomoment().utc(date)
es para manipular la hora actual (moment()
) y eldate
parámetro es inútil ya que este.utc()
en este caso no espera ningún parámetro.Esto funcionó para mí. Otros pueden encontrarlo útil.
// date = 2020-08-31T00: 00: 00Z Estoy ubicado en Dinamarca (la zona horaria es +2 horas)
moment.utc (momento (fecha) .utc ()). format () // devuelve 2020-08-30T22: 00: 00Z
fuente
Si todo lo demás falla, simplemente reinicialice con un inverso de su desplazamiento local.
var timestamp = new Date(); var inverseOffset = moment(timestamp).utcOffset() * -1; timestamp = moment().utcOffset( inverseOffset ); timestamp.toISOString(); // This should give you the accurate UTC equivalent.
fuente
keepOffset
parámetro en verdadero, como enmoment(timestamp).toISOString(true)
,aquí, paso el objeto de fecha y lo convierto en hora UTC.
$.fn.convertTimeToUTC = function (convertTime) { if($(this).isObject(convertTime)) { return moment.tz(convertTime.format("Y-MM-DD HH:mm:ss"), moment.tz.guess()).utc().format("Y-MM-DD HH:mm:ss"); } }; // Returns if a value is an object $.fn.isObject = function(value) { return value && typeof value === 'object'; }; //you can call it as below $(this).convertTimeToUTC(date);
fuente
Esta será la respuesta:
localdate = '2020-01-01 12:00:00' moment(localdate) //Moment<2020-01-01T12:00:00+08:00> moment.utc(moment(localdate)).format() //2020-01-01T04:00:00Z
fuente
Lea esta documentación de moment.js aquí . Vea el ejemplo y la salida a continuación donde convierto la hora GMT a la hora local (mi zona es IST) y luego convierto la hora local a GMT.
// convert GMT to local time console.log('Server time:' + data[i].locationServerTime) let serv_utc = moment.utc(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate(); console.log('serv_utc:' + serv_utc) data[i].locationServerTime = moment(serv_utc,"YYYY-MM-DD HH:mm:ss").tz(self.zone_name).format("YYYY-MM-DD HH:mm:ss"); console.log('Converted to local time:' + data[i].locationServerTime) // convert local time to GMT console.log('local time:' + data[i].locationServerTime) let serv_utc = moment(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate(); console.log('serv_utc:' + serv_utc) data[i].locationServerTime = moment.utc(serv_utc,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm:ss"); console.log('Converted to server time:' + data[i].locationServerTime)
La salida es
Server time:2019-12-19 09:28:13 serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time) Converted to local time:2019-12-19 14:58:13 local time:2019-12-19 14:58:13 serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time) Converted to server time:2019-12-19 09:28:13
fuente
¿No necesitas algo para comparar y luego recuperar los milisegundos?
Por ejemplo:
let enteredDate = $("#txt-date").val(); // get the date entered in the input let expires = moment.utc(enteredDate); // convert it into UTC
Con eso tienes la fecha de vencimiento en UTC. Ahora puede obtener la fecha "ahora mismo" en UTC y comparar:
var rightNowUTC = moment.utc(); // get this moment in UTC based on browser let duration = moment.duration(rightNowUTC.diff(expires)); // get the diff let remainingTimeInMls = duration.asMilliseconds();
fuente
moment.valueOf()
y(new Date()).getTime()
ambos devuelven los milisegundos desde el 1 de enero de 1970 UTC (es un estándar)