2017-09-01 3 views
0

Nous passons une date JSON dans Moment Timezone JS. Nous définissons notre fuseau horaire dans l'appel moment.tz() pour spécifier le fuseau horaire auquel nous voulons que l'heure apparaisse pour tout le monde, quel que soit le fuseau horaire local de l'utilisateur. Notre problème est que je veux maintenant le convertir au format d'heure Javascript par défaut, mais GARDEZ le fuseau horaire moment.tz() spécifié. J'ai essayé d'encapsuler le moment.tz() dans un nouveau Date() et en ajoutant le .toDate() mais qui sort juste la date locale de l'ordinateur de l'utilisateur (j'ai réglé mon fuseau horaire de machines à autre chose que le mien pour le tester). Ce que je veux qu'il fasse est de me donner la date/heure spécifique de fuseau horaire que j'ai spécifié comme le temps que j'ai spécifié dans Moment.Moment Timezone JS, retour à Javascript date

Exemple de ma sortie.

//1504897200000 = 1:00 pm on Friday September 8, 2017 
    var eventTimeDate = moment.tz(1504897200000, "America/Denver").format('h:mm A'); 

Maintenant, je veux prendre ma date de JSON et le reconvertir au format par défaut Javascript qui devrait être:

Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time) 

Mais si je change mon fuseau horaire sur mon ordinateur local, il apparaît comme le fuseau horaire de mon ordinateur ne fixant le fuseau horaire Je réglerai Moment.js

donc, si je mets mon fuseau horaire à Dublin en essayant de convertir le temps de moment en utilisant la méthode moment.tz()

 var eventTimeDateValue = moment.tz(1504897200000, "America/Denver").toDate(); 

Il produit:

Fri Sep 08 2017 20:00:00 GMT+0100 (GMT Daylight Time) 

Ce qui ne correspond pas à la "Amérique/Denver" J'ai mise dans le moment JS. Je lke que ce soit le:

Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time) 

Toutes les idées sur la façon de le reconvertir au format long, mais toujours garder le moment JS défini fuseau horaire?

Voici mon jsFiddle:

https://jsfiddle.net/549La2ct/

+1

Vous avez seulement besoin de la chaîne formatée en utilisant .t oString()? Comme ici https://jsfiddle.net/4wby7f07/ Ou avez-vous besoin d'analyser un objet de date JavaScript? – DevDig

Répondre

2

Si vous utilisez toDate(), il va créer un objet Date JavaScript, et il ne fournit pas un moyen de contrôler la sortie de la façon dont vous voulez.

Si vous voulez une chaîne dans le format souhaité, vous pouvez utiliser la méthode format(), avec un addition suggested in the docs pour obtenir le fuseau horaire des noms longs:

var abbrs = { 
    EST : 'Eastern Standard Time', 
    EDT : 'Eastern Daylight Time', 
    CST : 'Central Standard Time', 
    CDT : 'Central Daylight Time', 
    MST : 'Mountain Standard Time', 
    MDT : 'Mountain Daylight Time', 
    PST : 'Pacific Standard Time', 
    PDT : 'Pacific Daylight Time', 
}; 

moment.fn.zoneName = function() { 
    var abbr = this.zoneAbbr(); 
    return abbrs[abbr] || abbr; 
}; 

var str = moment.tz(1504897200000, "America/Denver").format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ (zz)'); 

La str variables aura la valeur:

Ven Sep 08 2017 13:00:00 GMT-0600 (Heure avancée des Rocheuses)

+1

c'était la route que je devais suivre. J'avais juste besoin de connaître cette dernière partie pour le GMT et le zoneName. Merci je vais l'utiliser. Très appréciée. – ClosDesign