web-dev-qa-db-ja.com

日付が有効かどうかを確認

以下がシナリオです。

私はStringの日付と日付のフォーマットが違います。例:
日付:2016-10-19
dateFormat: "DD-MM-YYYY"。

この日付が有効な日付かどうかを確認する必要があります。

私は次のことを試してみました

var d = moment("2016-10-19",dateFormat);

d.isValid()は毎回falseを返しています。 Moment.jsは与えられたフォーマットで日付を解析しませんか?

それから私は最初にDD-MM-YYYYで日付をフォーマットしてそれからMoment.jsにそれを渡すことを試みました:

var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);

date.isValid()は私に望ましい結果を与えています、しかしここでMoment.js日付オブジェクトは二度作成されます。どうすればこれを避けることができますか?より良い解決策はありますか?

参考私はdateFormatを変更することはできません。

80
Ganesh

解決策を見つけることができました。私が取得している日付はISO形式なので、時々日付を提供することでそれが検証され、dateFormatを渡す必要はありません。

var date = moment("2016-10-19");

そしてdate.isValid()は望ましい結果をもたらします。

126
Ganesh

var date = moment('2016-10-19', 'DD-MM-YYYY', true);

厳密な構文解析を強制するmomentを呼び出すときには、3番目の引数を追加する必要があります。これが今のドキュメントの関連部分です http://momentjs.com/docs/#/parsing/string-format/ 終わりに近づいていますセクションの.

85
schutta

ここに行きます: 作業の手間

$(function(){
  var dateFormat = 'DD-MM-YYYY';
  alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});
13
gschambial

undefinedデータ値のケースを処理するために、新しいDateと共にmomentを使用します。

const date = moment(new Date("2016-10-19"));

の理由:moment(undefined).isValid() == true

moment(new Date(undefined)).isValid() == false:より良い方法として

9
wakeupoj
console.log(` moment('2019-09-01', 'YYYY-MM-DD').isValid()?  ` +moment('2019-09-01', 'YYYY-MM-DD').isValid())
console.log(` moment('2019-22-01', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-01', 'YYYY-DD-MM').isValid())
console.log(` moment('2019-22-22', 'YYYY-DD-MM').isValid()?  ` +moment('2019-22-22', 'YYYY-DD-MM').isValid())
console.log(` moment('undefined', 'YYYY-DD-MM').isValid()?  ` +moment('undefined', 'YYYY-DD-MM').isValid())

 moment('2019-09-01', 'YYYY-MM-DD').isValid()?  true
 moment('2019-22-01', 'YYYY-DD-MM').isValid()?  true
 moment('2019-22-22', 'YYYY-DD-MM').isValid()?  false
 moment('undefined', 'YYYY-DD-MM').isValid()?  false
0
Sande