Provavelmente e uma resposta fácil para isso, mas não consigo encontrar uma maneira de fazer com que o moment.js retorne uma data e hora UTC em milissegundos. Aqui está o que estou fazendo:
var date = $("#txt-date").val(),
expires = moment.utc(date);
Alguma ideia do que estou fazendo de errado?
javascript
momentjs
user1956816
fonte
fonte
.utc()
.format()
, que emitiria o valor UTC. Ele não pode alterar o valor de data interno em si, porque umDate
já está rastreando um carimbo de data / hora UTC. São sempre apenas os métodos chamados que determinam se deve ser emitido UTC ou hora local. O momento é o mesmo nesse aspecto.Eu uso esse método e funciona. ValueOf não funciona para mim.
fonte
A partir de:
moment.js version 2.24.0
Vamos dizer que você tem uma entrada de data local, esta é a maneira correta de converter o seu dateTime ou Tempo de entrada para UTC :
var utcStart = new moment("09:00", "HH:mm").utc();
ou no caso de você especificar uma data
var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();
Como você pode ver, a saída do resultado será retornada em UTC:
//You can call the format() that will return your UTC date in a string utcStart.format(); //Result : 2019-06-24T13:00:00
Mas se você fizer isso conforme abaixo, ele não será convertido para UTC:
var myTime = new moment.utc("09:00", "HH:mm");
Você está apenas configurando sua entrada para a hora utc, é como se mencionasse que myTime está em UTC .... a saída será 9:00
fonte
é o caminho a percorrer, uma vez que
se comporta estranho ...
fonte
moment().utc(date).format(...)
?moment.utc(date)
é para analisar odate
. O segundomoment().utc(date)
é para manipular a hora atual (moment()
) e odate
parâmetro é inútil, pois.utc()
neste caso não espera nenhum parâmetro.Isso funcionou para mim. Outros podem achar útil.
// date = 2020-08-31T00: 00: 00Z Estou na Dinamarca (o fuso horário é +2 horas)
moment.utc (moment (date) .utc ()). format () // retorna 2020-08-30T22: 00: 00Z
fonte
Se tudo mais falhar, apenas reinicialize com o inverso de seu deslocamento 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.
fonte
keepOffset
parâmetro para true, como emmoment(timestamp).toISOString(true)
,aqui, estou passando o objeto de data e convertendo-o na 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);
fonte
Esta será a resposta:
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
fonte
Leia esta documentação do moment.js aqui . Veja abaixo o exemplo e a saída onde eu converto a hora GMT para a hora local (minha zona é IST) e, em seguida, converto a hora local para 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)
A saída é
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
fonte
Você não precisa de algo para comparar e, em seguida, recuperar os milissegundos?
Por exemplo:
let enteredDate = $("#txt-date").val(); // get the date entered in the input let expires = moment.utc(enteredDate); // convert it into UTC
Com isso você tem o prazo de validade em UTC. Agora você pode obter a data "agora" em UTC e 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();
fonte
moment.valueOf()
e(new Date()).getTime()
ambos retornam os milissegundos desde 1º de janeiro de 1970 UTC (é um padrão)