web-dev-qa-db-fra.com

Convertissez la date en UTC en utilisant moment.js

Probablement une réponse facile à cela, mais je n'arrive pas à trouver le moyen d'obtenir un moment.js pour renvoyer une date heure UTC en millisecondes. Voici ce que je fais:

var date = $("#txt-date").val(),
    expires = moment.utc(date);

Une idée de ce que je fais mal?

40
user1956816

Ceci se trouve dans la documentation . Avec une bibliothèque comme un moment, je vous exhorte à lire l'intégralité de la documentation. C'est vraiment important.

En supposant que le texte saisi soit entré en fonction de l'heure locale de l'utilisateur:

 var expires = moment(date).valueOf();

Si l'utilisateur est invité à entrer une date/heure UTC, alors:

 var expires = moment.utc(date).valueOf();
62
Matt Johnson

J'utilise cette méthode et fonctionne. ValueOf ne fonctionne pas pour moi.

moment.utc(yourDate).format()
22
Bruno Quaresma

À partir de: moment.js version 2.24.0

supposons que vous ayez une entrée de date locale, c'est la bonne manière pour convertir votre dateTime ou Time entrée en UTC:

var utcStart = new moment("09:00", "HH:mm").utc();

ou si vous spécifiez une date

var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();

Comme vous pouvez le constater, le résultat obtenu sera renvoyé en UTC:

//You can call the format() that will return your UTC date in a string 
 utcStart.format(); 
//Result : 2019-06-24T13:00:00 

Mais si vous faites comme ci-dessous, il ne le fera pas convertir en UTC:

var myTime = new moment.utc("09:00", "HH:mm"); 

Vous définissez uniquement votre entrée sur utc time, c'est comme si vous indiquez que myTime est en UTC, .... le résultat sera 9:00

4
napi15
moment.utc(date).format(...); 

est la voie à suivre, depuis

moment().utc(date).format(...);

se comporte bizarre ...

2

Si tout échoue, il suffit de réinitialiser avec un inverse de votre décalage 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.
2
Timothy Perez

ici, je passe l'objet de date et le convertis en heure 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);
1
Invincible

Vous n'avez pas besoin de quelque chose pour comparer et ensuite récupérer les millisecondes?

Par exemple:

let enteredDate = $("#txt-date").val(); // get the date entered in the input
let expires = moment.utc(enteredDate); // convert it into UTC

Avec cela, vous avez la date d'expiration en UTC . Maintenant, vous pouvez obtenir la date "actuelle" en UTC et comparer:

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();
0
ron.camaron