文字列が日付値であるかどうかを確認する 質問する

文字列が日付値であるかどうかを確認する 質問する

値が有効な日付であるかどうかを確認する簡単な方法は何ですか。既知の日付形式はすべて使用できます。

たとえば、すべて日付値として認識されるべき値 、 と、日付値として認識されるべきではない値 、 、 があります10-11-2009。これ10/11/2009が可能であれば、これをチェックする最も簡単な方法は何ですか? タイムスタンプも許可されるためです。2009-11-10T07:00:00+000020010350

ベストアンサー1

2015年アップデート

これは古い質問ですが、他にも次のような新しい質問があります:

この投稿は重複として閉じられるので、ここに新しい情報を追加することが重要だと思います。ここに投稿されたコードの一部を実際にコピーして貼り付け、本番環境で使用している人がいるのではないかと心配になったので、これを書いています。

ここでの回答のほとんどは、非常に特殊な形式にのみ一致する複雑な正規表現を使用しており、実際には間違っています(1月32日に一致するが、宣伝されている実際のISO日付には一致しないなど -デモ)または、コンストラクターに何でも渡してDate最善の結果を望んでいます。

Momentの使用

上で説明したようにこの答え現在、そのために利用可能なライブラリがあります:モーメント

これは、JavaScript で日付を解析、検証、操作、表示するためのライブラリであり、標準の JavaScript 日付処理関数よりもはるかに豊富な API を備えています。

これは 12kB に縮小/gzip されており、Node.js やその他の場所で動作します。

bower install moment --save # bower
npm install moment --save   # npm
Install-Package Moment.js   # NuGet
spm install moment --save   # spm
meteor add momentjs:moment  # meteor

Moment を使用すると、有効な日付を非常に具体的にチェックできます。期待する形式に関するヒントを追加することが非常に重要になる場合があります。たとえば、06/22/2015 などの日付は、DD/MM/YYYY 形式を使用しない限りは有効な日付のように見えますが、DD/MM/YYYY 形式を使用している場合は、この日付は無効として拒否されます。期待する形式を Moment に伝える方法はいくつかあります。たとえば、次のとおりです。

moment("06/22/2015", "MM/DD/YYYY", true).isValid(); // true
moment("06/22/2015", "DD/MM/YYYY", true).isValid(); // false

この引数は、入力が提供された形式のいずれかに正確にtrue準拠していない場合、Moment が入力を解析しないようにするためにあります(私の意見では、これはデフォルトの動作であるべきです)。

内部的に提供される形式を使用できます:

moment("2015-06-22T13:17:21+0000", moment.ISO_8601, true).isValid(); // true

複数の形式を配列として使用することもできます。

var formats = [
    moment.ISO_8601,
    "MM/DD/YYYY  :)  HH*mm*ss"
];
moment("2015-06-22T13:17:21+0000", formats, true).isValid(); // true
moment("06/22/2015  :)  13*17*21", formats, true).isValid(); // true
moment("06/22/2015  :(  13*17*21", formats, true).isValid(); // false

見る:デモ

その他のライブラリ

Moment.js を使用したくない場合は、他のライブラリもあります。

2016年アップデート

私は瞬間これはMomentのサブセットに似ていますが、既存のオブジェクトの突然変異によって引き起こされる驚きはありません(ドキュメント詳細についてはこちらをご覧ください。

2018年アップデート

今日は、ルクソン日付/時刻の操作には、Moment の代わりに を使用します。Moment とは異なり、すべてのオブジェクトが不変になるため、日付の暗黙的な変更に関連する厄介な驚きはありません。

より詳しい情報

参照:

JavaScript 日付解析ライブラリに関する Rob Gravelle による一連の記事:

結論

もちろん、車輪の再発明を試みたり、正規表現を書いたり(ただし、実際に実行する前に ISO 8601 と RFC 3339 を読んでください)、ランダム データを持つ組み込みコンストラクターを呼び出して'Invalid Date'このメッセージはすべてのプラットフォームでまったく同じですか?すべてのロケールで同じですか?将来的にも同じですか?)などのエラー メッセージを解析したり、テスト済みのソリューションを使用して、再発明ではなく改善に時間を費やしたりすることもできます。ここにリストされているライブラリはすべてオープン ソースの無料ソフトウェアです。

おすすめ記事