web-dev-qa-db-fra.com

Comment convertir une date à Moment.js en fuseau horaire local des utilisateurs?

J'utilise les frameworks Moment.js et Moment-Timezone, et j'ai un objet date Moment.js qui est explicitement dans le fuseau horaire UTC. Comment puis-je convertir cela dans le fuseau horaire actuel du navigateur?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

Donc, ce serait bien si je pouvais connaître le fuseau horaire local des utilisateurs; Ou bien, j'aimerais convertir l'objet de date en un autre objet de données qui utilise simplement le "fuseau horaire local", peu importe ce que c'est réellement.

67
oliver

Vous n'avez pas besoin d'utiliser moment-timezone pour cela. La bibliothèque principale moment.js dispose de toutes les fonctionnalités pour travailler avec UTC et le fuseau horaire local.

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();

À partir de là, vous pouvez utiliser n'importe laquelle des fonctions que vous pourriez attendre

var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...

Notez qu'en passant testDateUtc, qui est un objet moment, dans le constructeur moment(), il crée un clone. Sinon, lorsque vous appelez .local(), la valeur testDateUtc sera également modifiée, au lieu de la valeur localDate. Les moments sont mutables.

Notez également que si votre entrée d'origine contient un décalage de fuseau horaire tel que +00:00 ou Z, vous pouvez simplement l'analyser directement avec moment. Vous n'avez pas besoin d'utiliser .utc ou .local. Par exemple:

var localDate = moment("2015-01-30T10:00:00Z");
114
Matt Johnson-Pint
var dateFormat = 'YYYY-DD-MM HH:mm:ss';
var testDateUtc = moment.utc('2015-01-30 10:00:00');
var localDate = testDateUtc.local();
console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00
  1. Définissez votre format de date.
  2. Créez un objet moment et définissez l'indicateur UTC sur true pour l'objet.
  3. Créez un objet moment localisé converti à partir de l'objet moment d'origine.
  4. Renvoie une chaîne mise en forme à partir de l'objet moment localisé.

Voir: http://momentjs.com/docs/#/manipulating/local/

15
AndrewHenderson

Voici ce que j'ai fait:

var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();

{{ time }} est l'horodatage utc.

4
sayan

Utilisez la fonction utcOffset.

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).utcOffset(10 * 60); //set timezone offset in minutes
console.log(localDate.format()); //2015-01-30T20:00:00+10:00
1