web-dev-qa-db-ja.com

moment.jsを使用してISO8601の日付を検証する

Moment.jsを使用してJavaScriptでISO8601の日付を検証しようとしています

console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DD", true).isValid())

Falseを返します。どこが間違っているのですか?日付タイプの形式が正しくありませんか?

バージョン:モーメント2.5.1

16
user1184100

Praveenの例がjsfiddleで機能する理由はわかりませんが、サンプルが機能しない理由は、形式がYYYY-MM-DDではないためです。時間も含まれているため、無効と見なされます。日付に時間を入れずに試してみると、trueが返されます。

代わりにこれを試してください:
moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid()

11
antimatter

2番目の引数として文字列パターンを使用しないようにするには、次のように呼び出すことができます。

moment("2011-10-10T14:48:00", moment.ISO_8601).isValid() // true
moment("2016-10-13T08:35:47.510Z", moment.ISO_8601).isValid() // true
40
wawka

さて、私はそれを見つけました。

ドキュメント に従って、

バージョン2.3.0以降では、最後の引数にbooleanを指定して、Momentが厳密な解析を使用するようにすることができます。厳密な解析では、形式と入力が正確に一致している必要があります

厳密な操作を使用するため、falseを返します。以下のコードの使用を克服するには:

alert(moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid())
//This will return true

demo1

削除strict parsing

alert(moment("2011-10-10T14:48:00", "YYYY-MM-DD").isValid())
//This will return true

demo2

4
Praveen

これを使用して、日付の一部を一致させます

console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DD", false).isValid())

完全にフォーマットを一致させたい場合は

console.log(moment("2011-10-10T14:48:00", "YYYY-MM-DDTHH:mm:ss", true).isValid())
1
Cris