web-dev-qa-db-ja.com

Javascriptを使用して、日付範囲が有効であることを確認するにはどうすればよいですか?

JavaScriptでは、提供された日付が有効な範囲内にあるかどうかを判断するための最良の方法は何ですか?

この例としては、ユーザー入力requestedDateが次の有効な週の一部であるかどうかを確認する場合があります。これは、有効な日付が範囲の下限以上で範囲の上限以下であるため、ある日付が別の日付よりも大きいかどうかを確認するだけではないことに注意してください。

15
rjzii

これは実際、私の作品の多くの前に出てきた問題であり、次のコードが問題に対する私の答えです。

// checkDateRange - Checks to ensure that the values entered are dates and 
//     are of a valid range. By this, the dates must be no more than the 
//     built-in number of days appart.
function checkDateRange(start, end) {
   // Parse the entries
   var startDate = Date.parse(start);
   var endDate = Date.parse(end);
   // Make sure they are valid
    if (isNaN(startDate)) {
      alert("The start date provided is not valid, please enter a valid date.");
      return false;
   }
   if (isNaN(endDate)) {
       alert("The end date provided is not valid, please enter a valid date.");
       return false;
   }
   // Check the date range, 86400000 is the number of milliseconds in one day
   var difference = (endDate - startDate) / (86400000 * 7);
   if (difference < 0) {
       alert("The start date must come before the end date.");
       return false;
   }
   if (difference <= 1) {
       alert("The range must be at least seven days apart.");
       return false;
    }
   return true;
}

ここで、このコードについて注意すべき点がいくつかあります。Date.parse関数はほとんどの入力タイプで機能するはずですが、「YYYY MM DD」などの一部の形式で問題が発生することがわかっているため、使用する前にテストする必要があります。ただし、ほとんどのブラウザーは、コンピューターの領域設定に基づいて、Date.parseに指定された日付文字列を解釈することを思い出しているようです。

また、86400000の乗数は、探している日の範囲が何であれ、である必要があります。したがって、少なくとも1週間離れている日付を探している場合は、7になるはずです。

16
rjzii

したがって、私が現在理解している場合は、一方の日付がもう一方の日付よりも大きいかどうかを確認する必要があります。

function ValidRange(date1,date2)
{
   return date2.getTime() > date1.getTime();
}

次に、次のように、Date.parseを使用してUIから取得した文字列を解析する必要があります。

ValidRange(Date.parse('10-10-2008'),Date.parse('11-11-2008'));

それは役に立ちますか?

9
var myDate = new Date(2008, 9, 16);

// is myDate between Sept 1 and Sept 30?

var startDate = new Date(2008, 9, 1);
var endDate = new Date(2008, 9, 30);

if (startDate < myDate && myDate < endDate) {
    alert('yes');
    // myDate is between startDate and endDate
}

日付を作成するためにDate()コンストラクターに渡すことができるさまざまな形式があります。現在の時刻で新しい日付を作成することもできます。

var now = new Date();

それにさまざまなプロパティを設定します。

now.setYear(...);
now.setMonth(...);
// etc

詳細については、 http://www.javascriptkit.com/jsref/date.shtml または Google を参照してください。

4
Grant Wagner