2017-10-16 29 views
1

Utilisation de la fonction tz() de moment-timezone comme suit prévu:le format instant-fuseau horaire ne retourne pas le résultat

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format() 
//returns '2017-10-15T13:53:43+08:00' 

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format('h:m A') 
//I expect to return '9:53 PM' but it returns '1:53 PM' 

En fin de compte, je veux appliquer la fonction fromNow() pour formater le résultat. Mais quand je l'applique, il utilise l'horodatage initial et ignore le fuseau horaire appliqué.

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').fromNow() 
//I expect to return '1 min ago' when actual time is 13:54 UTC (21:54 in HK) but it returns '8 hours ago' 

Qu'est-ce que je fais mal ici?

+0

Quel est le problème avec cette question? Googled ce sujet pendant quelques heures et ce qui précède semble la bonne approche. Pourtant, je n'obtiens pas le résultat attendu. Si quelqu'un peut me guider vers la bonne direction ou expliquer en cas de downvote serait plus utile. – sbkl

+0

'moment.tz ('2017-10-15 13:53:43', 'Asie/Hong_Kong')' crée une date/heure qui correspond à ** 1: 53 PM à Hong Kong **. La méthode 'format' imprime juste cette même valeur, donc on ne sait pas pourquoi vous attendez 21:53 PM en sortie. –

+0

Pourriez-vous également [modifier] la question et ajouter le code qui utilise 'fromNow()', avec des exemples d'entrées et des sorties attendues par rapport aux sorties réelles? Ce n'est pas clair pour moi ce que * "utilise l'horodatage initial et ignore le fuseau horaire appliqué" *. –

Répondre

1

Quand vous faites:

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong'); 

Vous créez une date/heure qui correspond à Octobre 15 e 2017, à 13h53 à Hong Kong - qui, à son tour, correspond à 2017-10-15T05:53:43Z (5:53 AM dans UTC).

Lorsque vous appelez la fonction format():

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format(); 

Il retourne:

2017-10-15T13: 53: 43 + 08: 00

La partie est +08:00 juste le UTC offset - il dit juste que Hong Kong is 8 hours ahead UTC. Mais 2017-10-15T13:53:43+08:00 (1:53 PM à Hong Kong) est exactement le même instant que 2017-10-15T05:53:43Z (5:53 AM dans UTC). C'est pourquoi fromNow(), lorsque l'heure actuelle est 13:54 UTC, renvoie 8 heures.

Si vous voulez la date/heure qui correspond à 13:53 UTC, vous devez utiliser la fonction utc():

// October 15th 2017, 1:53 PM in UTC 
moment.utc('2017-10-15 13:53:43'); 

Maintenant, quand l'heure actuelle est 13:54 UTC , fromNow() renverra 1 minute (car la date/heure représente 1:53 PM dans UTC).

Pour convertir en Hong Kong fuseau horaire, il suffit d'utiliser la fonction tz():

// convert 1:53 PM UTC to Hong Kong timezone (9:53 PM) 
moment.utc('2017-10-15 13:53:43').tz('Asia/Hong_Kong').format('h:m A'); 

Ce convertira 13:53 UTC à fuseau horaire de Hong Kong (résultat 21h53):

+0

Merci pour la solution et l'explication! – sbkl

+0

@sbkl De rien, heureux d'aider! –