momentjs を使用して無効な日付/時刻文字列をチェックします。
var invalid = '2017-03-18 23;00;00';
if (moment(invalid).isValid()) {
return 'valid date'
}
これにより、(正しく) よく知られている「非推奨の警告: 指定された値は、認識された RFC2822 または ISO 形式ではありません......」というスタック トレースがスローされます。
しかし、try/catchを追加したとしても:
try {
var invalid = '2017-03-18 23;00;00';
if (moment(invalid).isValid()) {
return 'valid date'
}
catch (err) {
throw Error ('invalid date format');
}
スタックトレースはまだ印刷されます。スタックトレースが印刷されないようにするには、何をする必要がありますか?
StackOverflow で同様の質問をすべて検索しましたが、それらはすべて異なる問題を解決しようとしています (入力を修正するか、入力を解析するための正しい構文を見つける)。
私はv2.18.1を使用しています。
ベストアンサー1
使用する必要がありますmoment(String, String);
入力を解析します。フォーマット(またはさまざまなフォーマット)の場合は、moment.ISO_8601
ドキュメントには次のように書かれています:
Momentはすでにiso-8601文字列の解析をサポートしていますが、これはmomentを構築するときにフォーマット/フォーマットのリストで明示的に指定できます。
この方法なら非推奨の警告は出ません。実際の例を以下に示します。
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. とにかく、受け入れられる形式のリストがある場合は、それを使用することをお勧めしますmoment(String, String[]);
(必要な場合は厳密な解析も行います)。