以下がシナリオです。
私は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
を変更することはできません。
解決策を見つけることができました。私が取得している日付はISO形式なので、時々日付を提供することでそれが検証され、dateFormatを渡す必要はありません。
var date = moment("2016-10-19");
そしてdate.isValid()
は望ましい結果をもたらします。
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
厳密な構文解析を強制するmoment
を呼び出すときには、3番目の引数を追加する必要があります。これが今のドキュメントの関連部分です http://momentjs.com/docs/#/parsing/string-format/ 終わりに近づいていますセクションの.
ここに行きます: 作業の手間
$(function(){
var dateFormat = 'DD-MM-YYYY';
alert(moment(moment("2012-10-19").format(dateFormat),dateFormat,true).isValid());
});
undefined
データ値のケースを処理するために、新しいDateと共にmomentを使用します。
const date = moment(new Date("2016-10-19"));
の理由:moment(undefined).isValid() == true
moment(new Date(undefined)).isValid() == false
:より良い方法として
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