J'utilise le code suivant pour convertir une date-heure côté serveur en heure locale à l'aide de moment.js.
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Mais j'obtiens:
Avertissement de déprécation: moment où la construction tombe à 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 le réparer?
Pour se débarrasser de l'avertissement, vous devez soit:
Transmettez une version de votre chaîne de date au format ISO:
moment('2014-04-23T09:54:51');
Transmettez 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-la à Moment:
moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));
La dernière option est une solution de secours intégrée prise en charge par Moment, avec l'avertissement de la console obsolète. Ils disent qu'ils ne soutiendront pas ce repli dans les prochaines versions. Ils expliquent que l'utilisation de new Date('my date')
est trop imprévisible.
Vous pouvez également désactiver l'affichage de l'avertissement de dépréciation en définissant moment.suppressDeprecationWarnings = true;
La construction de date dans moment
utilise en interne la new Date()
dans le javascript. La construction new Date()
reconnaît la chaîne de date dans RFC2822 ou ISO dans tous les navigateurs. Lors de la construction d'un objet moment
dont la date n'est pas dans ces formats, l'avertissement de désapprobation est émis.
Bien que les avertissements de dépréciation soient émis, pour certains formats, l’objet moment
sera correctement construit dans Chrome, mais pas dans Firefox ou Safari. De ce fait, le traitement de la date dans Chrome peut donner les résultats escomptés (pas toujours) et jette Invalid Date
dans d'autres.
Considérons, 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
Ainsi, le moment.js
est utilisé à vos risques et périls dans le cas où les formats recommandés/standard ne sont pas utilisés.
Pour supprimer les avertissements de dépréciation ,
moment
construction.Exemple: moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
Exemple: moment("2018-02-01T18:30:00.000Z")
- Format ISO
moment("Thu, 01 Feb 2018 18:30:00 GMT")
- Format RFC2822 - Format dans Github
moment.suppressDeprecationWarnings = true;
Je suggère d'écraser le repli d'entrée au moment opportun.
moment.createFromInputFallback=function (config){
config._d = new Date(config._i);
}
Comme (3) supprimera tous les avertissements, (4) supprimera uniquement le repli de la construction de la date. En utilisant (4), vous obtiendrez Invalid Date
si la new Date()
interne est utilisée et que d'autres dépréciations sont visibles dans la console. Vous pouvez donc mettre à jour moment ou les méthodes obsolètes peuvent être remplacées dans l'application.
Si votre date vous a été transmise par une API sous la forme string
(comme dans mon numéro), vous pouvez utiliser un filtre pour convertir la chaîne en date pour un moment. Cela va prendre en compte le moment de la construction.
$scope.apiDate = 10/29/2017 18:28:03";
angular.module('myApp').filter('stringToDate', function() {
return function(value) {
return Date.parse(value);
};
});
Ajoutez-le à la vue:
{{apiDate | stringToDate | amDateFormat:'ddd, MMM DD'}}
Comme indiqué dans les réponses ci-dessus. Fournir le format de date devrait fonctionner.
Pourquoi devrais-je recevoir le message de désapprobation avec la ligne de code suivante? Je pensais que le format String + était supposé résoudre ce problème. moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
. Aussi, s'il vous plaît, je n'ai pas le contrôle sur le format de date fourni. Je sais que je peux le convertir moi-même en 'YYYY-MM-DDTHH:mm:ss'
alors le moment n’affiche pas le message de désapprobation. Cependant, selon la documentation, la ligne de code devrait fonctionner. Voici le message de désapprobation que je vois.
"Avertissement obsolète: la valeur fournie n’est pas au format RFC2822 ou ISO reconnu. La construction du moment revient à js Date (), qui n’est pas fiable pour tous les navigateurs et toutes les versions. Les formats de date non RFC2822/ISO sont déconseillés et seront supprimés dans prochaine version majeure. Veuillez vous référer à http://momentjs.com/guides/#/warnings/js-date/ pour plus d’informations. "