値が有効な日付であるかどうかを確認する簡単な方法は何ですか。既知の日付形式はすべて使用できます。
たとえば、すべて日付値として認識されるべき値 、 と、日付値として認識されるべきではない値 、 、 があります10-11-2009
。これ10/11/2009
が可能であれば、これをチェックする最も簡単な方法は何ですか? タイムスタンプも許可されるためです。2009-11-10T07:00:00+0000
200
10
350
ベストアンサー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 とは異なり、すべてのオブジェクトが不変になるため、日付の暗黙的な変更に関連する厄介な驚きはありません。
より詳しい情報
参照:
- Moment.js を使用して日付と時刻を管理するジェイ・ラージ
- Moment.js を使用して JavaScript の日付を操作するブラッドリー・ホルブルック
JavaScript 日付解析ライブラリに関する Rob Gravelle による一連の記事:
- 人気の JavaScript 日付解析ライブラリのまとめ: Moment.js
- 人気の JavaScript 日付解析ライブラリのまとめ: Datejs
- 人気の JavaScript 日付解析ライブラリのまとめ: XDate
結論
もちろん、車輪の再発明を試みたり、正規表現を書いたり(ただし、実際に実行する前に ISO 8601 と RFC 3339 を読んでください)、ランダム データを持つ組み込みコンストラクターを呼び出して('Invalid Date'
このメッセージはすべてのプラットフォームでまったく同じですか?すべてのロケールで同じですか?将来的にも同じですか?)などのエラー メッセージを解析したり、テスト済みのソリューションを使用して、再発明ではなく改善に時間を費やしたりすることもできます。ここにリストされているライブラリはすべてオープン ソースの無料ソフトウェアです。