2011-01-31 27 views
2

、私はすぐに二日が選択されているような別のinput[type="text"]に表示されるようにこれらの日付の差をしたいと思います。jQueryの日付ピッカーの日数

また、私は月曜日から日あらゆる週末を引くだけカウントするように理想的に私のカウントたい - 金曜日。

次のように私の(関連)のコードは次のとおりです。

JS:

$('#firstday, #lastday').datepicker({ 
    dateFormat: 'dd/mm/yy' 
}); 

XHTML:検索の

<label for="firstday">First Day of Leave</label> 
<input type="text" name="firstday" id="firstday" /> 

<label for="lastday">Last Day of Leave</label> 
<input type="text" name="lastday" id="lastday" /> 

<label for="totaldays">Total Days</label> 
<input type="text" name="totaldays" id="totaldays" /> 

多くは、さまざまなソリューションの多くに私をリードしてきました、のどれも私は私が好きなように働くことができるので、どんなアイデアも高く評価されます。

+1

PHPや.NETなどのバックエンドコードにアクセスできますか?値をサーバーに戻して日付差を返す方が簡単かもしれません。また、このスタックオーバーフローの質問を見たことがありますか? http://stackoverflow.com/questions/542938/how-do-i-get-the-number-of-days-between-two-dates-in-jquery –

+0

はい、私はPHPにアクセスしています。私は決してこれのためのJavaScriptルートを下ることを考慮しないだろうが、私は、このページを使用する必要がある唯一のマシンがJSをオフにすることができないことを知っているので、私はそれを使うのが安全だと思った。リンクをありがとう、私はそれを見てみましょう。 –

答えて

6

このような何か作業をする必要があります:

$("#firstday, #lastday").datepicker({ 
    onSelect: function(){ 

    // Date will give time difference in miliseconds, that is why we divide with 1000*60*60*24 

    var firstday = new Date($("#firstday").val().split("/").reverse().join(",")); 
    var lastday = new Date($("#lastday").val().split("/").reverse().join(","); 
    $("#totaldays").val((lastday - firstday)/86400000);   
    } 
}); 

ノードコンソールで、それが与える:

> x = new Date("18/5/2010".split("/").reverse().join(",")) 
Mon, 17 May 2010 22:00:00 GMT 
> y = new Date("18/5/2015".split("/").reverse().join(",")) 
Sun, 17 May 2015 22:00:00 GMT 
> x-y 
-157766400000 
> y-x 
157766400000 
> (y-x)/86400000 
1826 

- EDIT -

日付を開始し、日の日付の数を終了しています週末はgetDay()を使って簡単に計算できます。getDay()は日曜日は0、月曜日は1 ...土曜日は1から戻ります。

ヨも祝日のための他のいくつかの{}条件と組み合わせ.getMonth()と.getDate()を使用することができます。

var weekend_count = 0; 
for (i = firstday.valueOf(); i <= lastday.valueOf(); i+= 86400000){ 
var temp = new Date(i); 
if (temp.getDay() == 0 || temp.getDay() == 6) { 
    weekend_count++; 
} 
} 

、最後にあなただけのちょうど終わりにメモしておく

$("#totaldays").val((lastday - firstday)/86400000 - weekend_count); 

を行います。別の関数でこのコードを(できるだけ多く)外挿しておくと、コードの保守が容易になり、他の場所でも同じ関数が必要になることがあります。

幸運。

+0

こんにちは、お返事ありがとうございます。私はあなたのコードを私のdateFormatと組み合わせましたが、それは良い古い 'NaN'問題を投げています。私は約遊びをするよ... –

+0

私は訂正はほとんどしていません。加算するだけで、Math.abs(x-y)を使って負の値を無視することができます。 – Krule

+0

うん、それは良い、歓声を探しています。私は日付を含めるためにそこに '+1'を追加しましたが、それは素晴らしいです。どのように週末をどのように割引するか? –

関連する問題