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.
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).
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')
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()
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.