15

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

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

4

3 に答える 3

18

これは実際、私の仕事で何度も出てきた問題であり、次のコードはその問題に対する私の答えです。

// 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 である必要があります。

于 2008-09-16T16:09:29.783 に答える
10

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

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

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

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

それは役に立ちますか?

于 2008-09-16T16:08:07.807 に答える
4
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を参照してください。

于 2008-09-16T16:10:48.847 に答える