2017-09-22 1 views
0

Mon objet moment ne convertira pas le fuseau horaire. J'essaye de convertir l'objet de date et d'heure en UTC, mais il retourne juste la date/heure originale sans le changement. Est-ce que quelqu'un sait pourquoi cela se passe? On dirait qu'il pourrait supposer l'heure d'origine comme UTC même si ce n'est pas en fonction de _d?Moment Conversion de fuseau horaire ne fonctionne pas

momentPre = moment(post.date + " " + post.time + "00", "YYYY-M-D HH:mm:ss") 
momentAft = momentPre.toISOString() 
momentParse = moment.tz(momentAft, 'America/Denver') 
post.utcDate = momentParse.clone().tz("UTC")._i.substring(0,10) 

sortie objet momentParse (_isUTC retour vrai, même si ce ne est pas que je l'ai forcé à false avant de tester et ne marche pas résoudre le problème.):

{ [Number: 1506010200000] 
    _isAMomentObject: true, 
    _i: '2017-09-21T16:10:00.000Z', 
    _f: 'YYYY-MM-DDTHH:mm:ss.SSSSZ', 
    _tzm: 0, 
    _isUTC: true, 
    _pf: 
    { empty: false, 
    unusedTokens: [], 
    unusedInput: [], 
    overflow: -1, 
    charsLeftOver: 0, 
    nullInput: false, 
    invalidMonth: null, 
    invalidFormat: false, 
    userInvalidated: false, 
    iso: true }, 
    _locale: Locale { ordinal: [Function], _abbr: 'en' }, 
    _a: [ 2017, 8, 21, 16, 10, 0, 0 ], 
    _d: Thu Sep 21 2017 04:10:00 GMT-0600 (MDT), 
    _z: 
    { name: 'America/Denver', 
    abbrs 
    ... 

sortie de momentParse.clone() .tz ("UTC")

{ [Number: 1506010200000] 
    _isAMomentObject: true, 
    _i: '2017-09-21T16:10:00.000Z', 
    _f: 'YYYY-MM-DDTHH:mm:ss.SSSSZ', 
    _tzm: 0, 
    _isUTC: true, 
    _offset: 0, 
    _pf: 
    { empty: false, 
    unusedTokens: [], 
    unusedInput: [], 
    overflow: -1, 
    charsLeftOver: 0, 
    nullInput: false, 
    invalidMonth: null, 
    invalidFormat: false, 
    userInvalidated: false, 
    iso: true }, 
    _locale: Locale { ordinal: [Function], _abbr: 'en' }, 
    _z: 
    { name: 'UTC', 
    abbrs: [ 'UTC' ], 
    untils: [ Infinity ], 
    offsets: [ 0 ] }, 
    _a: [ 2017, 8, 21, 16, 10, 0, 0 ], 
    _d: Thu Sep 21 2017 10:10:00 GMT-0600 (MDT) } 
+0

Avez-vous ajouté le fuseau horaire js file – Thusitha

+0

Oui, j'utilise le package mrt: moment-timezone. – Silicabello

+0

Je ne suis pas exactement sûr de votre question de savoir exactement ce que vous voulez atteindre en termes d'utilisation et pourquoi auriez-vous besoin de cela. Lorsque vous enregistrez un champ dans Meteor Collection, il est enregistré en tant que UTC par défaut. La différence est ressentie du côté client. Le client selon leur fuseau horaire sera en mesure de lire la date correctement. Alors, pourquoi auriez-vous besoin de conversion de fuseau horaire? Si vous en avez vraiment besoin, pouvez-vous expliquer pourquoi dans la question? –

Répondre

0

Cela fonctionne, vous obtenez juste la date fausse.

Plutôt que momentObj._i.substring(0,10), vous devez utiliser la méthode momentObj.format().

const now = moment() 
now.tz('UTC').format() 
# 2017-09-22T04:39:58Z 
now.clone().tz('Europe/Kiev').format() 
# 2017-09-22T07:39:58+03:00 
now.clone().tz('America/Denver').format() 
# 2017-09-21T22:39:58-06:00 

Voici .format() documentation.

Ajouté: en utilisant .clone() est nécessaire que si vous voulez laisser now inchangé, sinon vous pouvez juste faire now.tz(...).format(...).