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.
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");
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
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();
Où {{ time }}
est l'horodatage utc.
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