受け入れたい日付の形式を決定する必要があります。
次に、どのフォームを受け入れたいかがわかったら、MDN の仕様new Date(str)
またはdate.parse()
MDNで仕様を確認し、必要なものを正確にサポートしているかどうか、およびエラー状態で正しいことを行うかどうかを確認できます (おそらくそうではないでしょう)。そうでない場合は、手動で解析する必要があります。
さらにサポートが必要な場合は、受け入れたい日付の形式を指定する必要があります。
また、JavaScript が追加の日付形式をサポートするように移動したため、ブラウザーの違いもいくつかあります。また、以前のブラウザーではそれらの間にいくつかの矛盾がありました。つまり、合法および違法な日付形式文字列を使用して簡単なテスト スクリプトを自分で作成し、妥当性検出は、いくつかのブラウザーで必要なことを行います。これは、正しく理解するための高度な科学ではありませんが、簡単なことでもなく、元の日付オブジェクトがサポートしているものだけを受け入れたい場合を除いて、いくつかの作業が必要です (これはありそうもないことです)。
これが私のコードである場合、すべてのブラウザーで 100% 確実に機能することがわかっている入力形式を手動で解析することは、独自の手動解析であるため、はるかに少ない作業であると判断するでしょう。おそらく、正規表現を使用して日付を解析し、各コンポーネントを数値に変換して、各コンポーネントの有効性を確認します。次に、これらの数値コンポーネントを Date コンストラクターにフィードして、Date オブジェクトを作成できます。
組み込みの日付クラスは、ユーザー入力にはあまり役に立ちません。これにライブラリを使用する場合、date.js ライブラリには、この点で便利な機能がたくさんあります。
これらの米国形式を受け入れる手動解析関数の例を次に示します。
mm-dd-yyyy
mm dd yyyy
mm/dd/yyyy
JS コード:
function checkDate(str) {
var matches = str.match(/(\d{1,2})[- \/](\d{1,2})[- \/](\d{4})/);
if (!matches) return;
// parse each piece and see if it makes a valid date object
var month = parseInt(matches[1], 10);
var day = parseInt(matches[2], 10);
var year = parseInt(matches[3], 10);
var date = new Date(year, month - 1, day);
if (!date || !date.getTime()) return;
// make sure we have no funny rollovers that the date object sometimes accepts
// month > 12, day > what's allowed for the month
if (date.getMonth() + 1 != month ||
date.getFullYear() != year ||
date.getDate() != day) {
return;
}
return(date);
}
そして、いくつかのテストケースを含むデモ: http://jsfiddle.net/jfriend00/xZmBY/
ユーロ形式が必要な場合は、コードをそれに切り替えるのは簡単なことです。どちらの場合でも、受け入れる形式を決定し、それをコーディングしてから、どの形式が必要かをユーザーに伝える必要があります。これが厄介だと思われる場合は、多くのサイトがこの複雑さを持たない日付カレンダー ピッカーを使用している理由がわかるでしょう。