web-dev-qa-db-fra.com

comment gérer les avertissements de dépréciation dans momentjs

Je veux utiliser momentjs pour vérifier les chaînes de date/heure invalides:

var invalid = '2017-03-18 23;00;00';
if (moment(invalid).isValid()) {
  return 'valid date'
}

Ceci lance (correctement) un stacktrace avec le message habituel 'Avertissement de déprécation: la valeur fournie n'est pas au format reconnu RFC2822 ou ISO ......'

Mais même si j'ajoute un essai/attrape:

try {
  var invalid = '2017-03-18 23;00;00';
  if (moment(invalid).isValid()) {
    return 'valid date'
  }
catch (err) {
  throw Error ('invalid date format');
}

le stacktrace est toujours imprimé . Que dois-je faire pour éviter que le stacktrace ne soit imprimé?

J'ai parcouru toutes les questions similaires sur StackOverflow, mais elles essaient toutes de résoudre un problème différent (corriger l'entrée ou trouver la syntaxe correcte pour analyser l'entrée).

Je utilise v2.18.1.

21
hepabolu

Vous devez utiliser moment(String, String); pour analyser votre entrée. Si vous ne souhaitez pas spécifier un format (ou un tableau de formats ), vous pouvez utiliser moment.ISO_8601 . Comme le dit la documentation:

Moment supporte déjà l'analyse de chaînes iso-8601, mais cela peut être spécifié explicitement dans le format/la liste de formats lors de la construction d'un moment.

De cette façon, vous ne recevrez pas d'avertissement de dépréciation. Voici un exemple de travail:

var invalid = '2017-03-18 23;00;00';
if (moment(invalid, moment.ISO_8601).isValid()) {
  console.log('valid date');
} else {
  console.log('invalid date');
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

PS. Quoi qu'il en soit, si vous avez une liste de formats acceptés, je suggère d'utiliser moment(String, String[]); (et une analyse syntaxique stricte, si nécessaire).

31
VincenzoC

Spécifiez le format de chaîne pour votre date, puis l'avertissement disparaîtra

moment("2017-1-27", 'YYYY-M-D').format('DD MMMM YYYY')
1
Nipek

L'ajout de .format() sans aucun argument à l'expression du moment à l'origine de cet avertissement était la solution pour moi:

moment(r.created_at.toDate()).format()
0
bruddha

La procédure ci-dessous me permet de supprimer les avertissements RFC2822.

Utilisez moment (String, FormatString) pour convertir une chaîne en date.

 var newDt = Moment(this.state.dob,"MM/DD/YY")

Et sous le code de la date à la chaîne

var dt = Moment(newDt).format("YYYY-MM-DD") 

De cette façon, les messages d’avertissement ne seront pas affichés.

0
krish