1
votes

Convertir la date IST en UTC dans le flux RSS

J'ai une date au format chaîne "mer, 08 avril 2020 15:24:06 IST" Je veux le convertir en date javascript afin de pouvoir effectuer des opérations. Je veux obtenir la date UTC de IST ou tout ce qui est passé par l'API et je dois la convertir selon le fuseau horaire de l'utilisateur afin que je ne puisse pas en supprimer IST. IST (Indian Standard Time) n'est qu'un exemple: AET (Australian Eastern Time), EET (Eastern European Time), etc ...

new Date('Wed, 08 Apr 2020 15:24:06 IST')

Je reçois une date invalide

Cette chaîne provient de Flux RSS du Times Of India , tels que celui-ci . Comment gérer les abréviations de fuseau horaire dans les flux RSS?


2 commentaires

Vous avez tagué Luxon et MomentJS mais je ne vois aucun code associé!


en fait, je veux obtenir la date UTC de IST ou tout ce qui est passé par l'API et je dois la convertir selon le fuseau horaire de l'utilisateur afin que je ne puisse pas en supprimer IST. IST (Indian Standard Time) n'est qu'un exemple, cela pourrait être AET (Australian Eastern Time), EET (Eastern European Time), etc.


3 Réponses :


0
votes

Essayez ceci:

moment('Wed, 08 Apr 2020 15:24:06').utc().format('YYYY-MM-DD');

Et vous obtenez une erreur à cause de IST, supprimez simplement cela et cela ne vous donnera pas d'erreur

Si vous ne voulez que la date, utilisez ceci:

moment('Wed, 08 Apr 2020 15:24:06').utc();


2 commentaires

en fait, je veux obtenir la date UTC de IST ou tout ce qui est passé par l'API et je dois la convertir selon le fuseau horaire de l'utilisateur afin que je ne puisse pas en supprimer IST. IST (Indian Standard Time) n'est qu'un exemple, cela pourrait être AET (Australian Eastern Time), EET (Eastern European Time), etc.


Vous vous trompez, le format correct est new Date ('Wed, 08 Apr 2020 15:24:06 (India Standard Time)' pas new Date ('Wed, 08 Apr 2020 15: 24:06 IST ')



0
votes

Si vous souhaitez analyser ou afficher un moment en UTC, vous pouvez utiliser moment.utc ()

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
var res = moment.utc("Wed, 08 Apr 2020 15:24:06",'DD-MMM-YYYY').format("YYYY-MM-DD");
console.log(res);


1 commentaires

en fait, je veux obtenir la date UTC de IST ou tout ce qui est passé par l'API et je dois la convertir selon le fuseau horaire de l'utilisateur afin que je ne puisse pas en supprimer IST. IST (Indian Standard Time) n'est qu'un exemple, cela pourrait être AET (Australian Eastern Time), EET (Eastern European Time), etc.



1
votes

Sans contexte supplémentaire, ce n'est pas possible. Les abréviations de fuseau horaire ne sont pas standardisées et ne sont pas uniques.

Dans votre exemple, vous avez dit que IST signifie "heure normale de l'Inde" pour vous, mais IST est également utilisé pour "Heure standard d'Israël" et "Heure standard irlandaise". Tous ont des décalages de fuseau horaire très différents.

Un autre exemple courant est CST , qui peut être "Heure normale du centre", "Heure normale de Cuba" ou "Heure normale de la Chine" ".

À la place, vous devez revenir à la source d'origine et obtenir un décalage de fuseau horaire (tel que +05: 30 ) ou un identifiant de fuseau horaire (tel que Asia / Kolkata ), ou dériver ce contexte d'une autre manière.

Vous avez dit que vous récupériez cet horodatage depuis un flux RSS du Times of India . C'est le type de contexte supplémentaire dont je parle. Puisque vous savez qu'il s'agit d'une source d'information indienne, vous pouvez supposer que IST signifie l'heure standard de l'Inde.

Vous devez savoir que le format du flux RSS du Times of India est ne pas utiliser correctement les horodatages. La spécification RSS 2.0 exige que les horodatages soient au format Format RFC 822 . Dans ce format, IST n'est pas un fuseau horaire valide. En effet, si vous le mettez dans un site comme Feed Validator , il vous donnera l'erreur "doit être une date-heure RFC-822" .

Notez que la RFC 822 est ancienne et obsolète. Il a été remplacé par RFC 2822 , puis à nouveau par RFC 5322 . Les abréviations de fuseau horaire sont toutes obsolètes et déplacées vers le obs-zone code > section. Ainsi, ils ne devraient vraiment pas être utilisés du tout. Seuls les décalages numériques doivent apparaître. Cela dit, beaucoup d'implémentations RSS suivent l'ancien standard, et il est donc raisonnable d'accepter certaines des abréviations spécifiées dans obs-zone . Plus précisément, toutes les implémentations doivent accepter ce qui suit:

var s = 'Wed, 08 Apr 2020 15:24:06 IST';
var d = new Date(s.replace('IST', '+0530'));

(Les autres zones militaires «A» - «Y» ne doivent jamais être utilisées.)

Remarque que IST n’en fait pas partie. Ainsi, pour répondre directement à votre question, lors de l'analyse d'un horodatage RFC 822 contenant une abréviation de fuseau horaire non standard, vous devrez remplacer l'abréviation par un décalage vous-même avant l'analyse. Dans ce cas:

"Z"    == "+0000"
"UT"   == "+0000"
"GMT"  == "+0000"
"EST"  == "-0500"
"EDT"  == "-0400"
"CST"  == "-0600"
"CDT"  == "-0500"
"MST"  == "-0700"
"MDT"  == "-0600"
"PST"  == "-0800"
"PDT"  == "-0700"

Vous pouvez également remplacer les autres abréviations obs-zone que j'ai listées, mais cela ne devrait généralement pas être nécessaire. La plupart des implémentations d'ECMAScript les analyseront (même si elles ne sont pas requises par les spécifications).

Si vous rencontrez d'autres flux RSS avec d'autres abréviations de fuseau horaire, vous devrez déterminer manuellement comment les interpréter. Il n'y a pas de liste définitive.

Quelques lectures supplémentaires:


2 commentaires

Après quelques recherches, j'ai appris que l'IST n'est pas seulement l'heure normale de l'Inde. Je ne peux même pas produire une date comme celle-là, mais comment j'obtiens ce type de date dans le fil RSS du Times Of India. timesofindia.indiatimes.com/rssfeeds/-2128672765.cms vous pouvez jeter un œil sur ce. Dans cet exemple, je peux simplement remplacer IST par +0330 de GMT + 330 qui résoudra ce problème, mais il se peut que le flux RSS d'un autre pays utilise la date selon le format IST, alors je dois faire face au même problème, donc je cherche une fonctionnalité qui me donne la date UTC selon la date donnée dans ce format.


+0530 , pas +0330 . Mais oui. Voir ma réponse mise à jour et développée. Je vais également modifier votre question pour l'encadrer pour les flux RSS.