2008-09-16 6 views
13

JavaScriptで、提供された日付が有効な範囲内にあるかどうかを判断する最良の方法は何ですか?Javascriptを使用して、日付範囲が有効であることを確認するにはどうすればよいですか?

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

答えて

15

これは実際には私の作品ではかなり前に出てきたことがありましたが、これに続くコードは私の答えです。今

// 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でなければなりません。

+0

plsは開始と終了のfromatを更新しますcheckDateRange(start、end)その非常に難しいchk – John

7

だから、私が実際に分かっていれば、ある日付がもう一方のものよりも大きいかどうかを調べる必要があります。

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

あなたは、このように、Date.parseで、あなたはUIから取得されている文字列を解析する必要があります。

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

はその助けをしていますか?

+0

1つの日付が他の日付よりも大きいかどうかを確認するのではなく、1つの日付が指定された範囲の有効な日付の範囲内にあるかどうかを確認することが問題ではありません。たとえば、次の7日間でタスクに対処するというビジネス要件がある場合は、スケジュールされた日付が現在の日付から7日以内であることを確認する必要があります。 – rjzii

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を参照してください。

関連する問題