JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで日付パターンを検証する方法を解説

JavaScriptで日付の形式(パターン)が正しいかどうかを検証したい場合、Dateオブジェクトを活用することで簡単にチェックできます。この記事では、正しい日付と誤った日付の両方を検証するサンプルコードを紹介します。

検証の仕組み

日付文字列を「月/日/年」の形式(例:11/11/2017)として受け取り、スラッシュ(/)で分割します。その後、Dateオブジェクトを生成し、元の入力値と各要素(月・日・年)が一致しているかどうかを確認します。存在しない日付(例:18月18日)を指定すると、Dateオブジェクトが自動的に繰り上げ処理を行うため、元の値との不一致によって不正な日付を検出できます。

サンプルコード

<!DOCTYPE html>
<html>
   <body>
   
      <script>
         function validDate(date) {
            var split = date.split('/');
            var date = new Date(split[2] + '/' + split[0] + '/' + split[1]);
            return (date && (date.getMonth() + 1) == split[0] && date.getDate() == Number(split[1]) && date.getFullYear() == Number(split[2]));
         }
         document.write("Valid date: 11/11/2017 = "+validDate('11/11/2017'));
         document.write("<br>Valid date: 18/18/2017 = "+validDate('18/18/2017'));
         document.write("<br>Valid date: 05/09/2017 = "+validDate('05/09/2017'));
      </script>
      
   </body>
</html>

実行結果

Valid date: 11/11/2017 = true
Valid date: 18/18/2017 = false
Valid date: 05/09/2017 = true

コードのポイント

validDate()関数は、以下の手順で日付の妥当性を判定しています。

  • split('/')で日付文字列を「月」「日」「年」に分解します。
  • 分解した値から新しいDateオブジェクトを作成します。
  • 生成されたオブジェクトの月・日・年が、元の入力値と完全に一致するかを確認します。
  • すべて一致すればtrue(有効な日付)、一致しなければfalse(無効な日付)を返します。

上記の実行結果を見ると、「18/18/2017」は18月という存在しない月のためfalseと判定され、それ以外の日付はtrueと判定されていることがわかります。この方法を使えば、ユーザー入力された日付が実際に存在するものかどうかを確実にチェックできます。

  1. JavaScriptで日付を比較する方法|サンプルコード付きでわかりやすく解説

    JavaScriptでは、Dateオブジェクトを使うことで日付を簡単に比較できます。比較対象となる日付は、過去・現在・未来のいずれであっても問題ありません。たとえば、過去の日付と未来の日付を比べたり、未来の日付と今日の日付を比べたりすることも可能です。日付比較の仕組みDateオブジェクト同士を「>」や「<」といった比較演算子で比べると、それぞれの日付は自動的に「1970年1月1日00:00:00 UTCからの経過ミリ秒」に変換され、数値として比較されます。そのため、開発者が特別な変換処理を書く必要はありません。なお、「==」や「===」による等価比較の場合は注意が必要です。Date

  2. JavaScriptで日付を含む配列を昇順にソートする方法

    JavaScriptでは、日付文字列と数値がペアになったデータを扱う場面は少なくありません。例えば、以下のような配列があったとします。const arr = [     [ 02/13/2015, 0.096 ],     [ 11/15/2013, 0.189 ],     [ 05/15/2014, 0.11 ],     [ 12/13/2013, 0.1285 ],     [ 01/15