1. ホーム
  2. javascript

日付を検証する方法は?

2023-10-02 13:49:09

質問

私は、ある日付が有効であることを確認するためにテストしようとしています。 2/30/2011 と入力した場合、それは間違っているはずです。

任意の日付でこれを行うにはどうしたらよいでしょうか。

どのように解決するのですか?

日付文字列を検証する簡単な方法のひとつは、日付オブジェクトに変換してそれをテストすることです。

// Expect input as d/m/y
function isValidDate(s) {
  var bits = s.split('/');
  var d = new Date(bits[2], bits[1] - 1, bits[0]);
  return d && (d.getMonth() + 1) == bits[1];
}

['0/10/2017','29/2/2016','01/02'].forEach(function(s) {
  console.log(s + ' : ' + isValidDate(s))
})

この方法でDateをテストする場合、日付が範囲外だと月が変わってしまうので、月だけをテストする必要があります。月が範囲外であっても同じです。どの年でも有効です。

日付の文字列のビットをテストすることもできます。

function isValidDate2(s) {
  var bits = s.split('/');
  var y = bits[2],
    m = bits[1],
    d = bits[0];
  // Assume not leap year by default (note zero index for Jan)
  var daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

  // If evenly divisible by 4 and not evenly divisible by 100,
  // or is evenly divisible by 400, then a leap year
  if ((!(y % 4) && y % 100) || !(y % 400)) {
    daysInMonth[1] = 29;
  }
  return !(/\D/.test(String(d))) && d > 0 && d <= daysInMonth[--m]
}

['0/10/2017','29/2/2016','01/02'].forEach(function(s) {
  console.log(s + ' : ' + isValidDate2(s))
})