J'utilise le code suivant pour convertir une date-heure côté serveur en heure locale en utilisant moment.js.
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Mais je reçois:
Avertissement de dépréciation: la construction du moment revient à js Date. Ceci est déconseillé et sera supprimé dans la prochaine version majeure. Veuillez vous référer à https://github.com/moment/moment/issues/1407 pour plus d'informations.
Il semble que je ne peux pas m'en débarrasser! Comment puis-je y remédier?
javascript
date
momentjs
Dariush
la source
la source
Réponses:
Pour vous débarrasser de l'avertissement, vous devez soit:
Transmettez une version au format ISO de votre chaîne de date:
moment('2014-04-23T09:54:51');
Passez la chaîne que vous avez maintenant, mais indiquez à Moment le format de la chaîne:
moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');
Convertissez votre chaîne en un objet Date JavaScript, puis transmettez-le à Moment:
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
La dernière option est une solution de secours intégrée que Moment prend en charge pour le moment, avec l'avertissement de console obsolète. Ils disent qu'ils ne prendront pas en charge cette solution de secours dans les prochaines versions. Ils expliquent que l'utilisation
new Date('my date')
est trop imprévisible.la source
moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());
ok? Ou suis-je simplement en train de supprimer un problème prêt à s'écraser silencieusement dans un proche avenir comme celui-ci?Invalid
résultat de date.Comme alternative, vous pouvez supprimer l'affichage de l'avertissement d'obsolescence en définissant
moment.suppressDeprecationWarnings = true;
la source
// @ts-ignore
(au moins pour certaines versions de moment-timezone et @ types / moment-timezone).La construction de la date
moment
utilise en interne lenew Date()
dans le javascript. Lanew Date()
construction reconnaît la chaîne de date aux formats RFC2822 ou ISO dans tous les navigateurs. Lors de la construction d'unmoment
objet dont la date n'est pas dans ces formats, l'avertissement d'obsolescence est émis.Bien que les avertissements d'obsolescence soient lancés, pour certains formats, l'
moment
objet sera construit avec succès dans Chrome, mais pas dans Firefox ou Safari. Pour cette raison, le traitement de la date dans Chrome peut donner des résultats comme prévu (pas tout le temps) et en ajouterInvalid Date
d'autres.Considérez
02.02.2018
,Chrome -
moment("02.02.2018")._d
->Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)
Firefox -
moment("02.02.2018")._d
->Invalid Date
Safari -
moment("02.02.2018")._d
->Invalid Date
Donc, le
moment.js
est utilisé à vos propres risques au cas où les formats recommandés / standard ne seraient pas utilisés.Pour supprimer les avertissements d'obsolescence ,
moment
construction.Exemple :
moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
Exemple:
moment("2018-02-01T18:30:00.000Z")
- Format ISOmoment("Thu, 01 Feb 2018 18:30:00 GMT")
- Format RFC2822 - Format dans Githubmoment.suppressDeprecationWarnings = true;
Je suggère d'écraser le repli d'entrée dans le moment.
Comme (3) supprimera tous les avertissements, (4) supprimera uniquement le repli de construction de date. En utilisant (4), vous obtiendrez au
Invalid Date
fur et à mesure que l'internenew Date()
est utilisé et que d'autres dépréciations peuvent être vues dans la console, ainsi le moment peut être mis à niveau ou les méthodes obsolètes peuvent être remplacées dans l'application.la source
Si votre date vous est transmise depuis une API comme
string
(comme mon problème), vous pouvez utiliser un filtre pour convertir la chaîne en une date pour un moment. Cela prendra en charge l'avertissement de construction du moment.Ajoutez-le à la vue:
la source
Comme indiqué dans les réponses ci-dessus. Fournir le format de date devrait fonctionner.
Pourquoi recevrais-je le message d'obsolescence avec la ligne de code suivante. Je pensais que le format String + était censé résoudre le problème.
moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
. De plus, je n'ai pas de contrôle sur le format de date fourni. Je sais que je peux le convertir moi-même pour que'YYYY-MM-DDTHH:mm:ss'
le moment ne montre pas le message d'obsolescence. Cependant, selon la documentation, la ligne de code devrait fonctionner. Voici le message d'obsolescence que je vois.la source