2016-05-01 11 views
0

2つの日付範囲があります。 [2016-1-1,2016-3-1]および[2016-2-21,2016-10-1]と私は、JavascriptまたはJqueryまたは任意のライブラリを使用して、これら2つの日付範囲の間の週数を取得したいと思います。 たとえば、最初の範囲が[2016-1-1,2016-3-1]で、2番目の範囲が[2016-2-21,2016-10-1]の場合、2つの範囲の間の週数を意味します。その2つの範囲の間には、2016-2-21から2016-3-1までの1週間が週になります。私は共通を意味しますJqueryまたはJavascriptの2つの範囲または日付の間のコミュニケーション数を取得する

+0

1週間はどういう意味ですか?毎日7日、または月曜日から日曜日までのみ? –

+0

@Gothdo月曜日から日曜日までに何人か。私は何週に何週間かを意味します。 – ler

+0

Googleで検索:http://forums.asp.net/t/1466131.aspx?Calculate+no+of+week+between+2+date+using+javascript –

答えて

1

これを行うことで大きな助けになりますライブラリ、moment.jsは、あります。

開始日で範囲をソートします。これにより、重なりを検出しやすくなります。次に、重なりを計算して週に変換します。

var format = 'YYYY-MM-DD'; 

function intersectDateRanges(dates) { 
    if(dates.length == 0) return null; 
    if(dates.length == 1) return dates[0].slice(0); 
    dates = dates.map(function(v,i,a){ 
    var start = moment(v[0],format).startOf('day'); 
    var end = moment(v[1],format).endOf('day'); 
    return [start,end]; 
    }); 
    dates.sort(function(a,b){ 
    if(a[0].isBefore(b[0])) return -1; 
    if(a[0].isAfter(b[0])) return 1; 
    return 0; 
    }); 
    var range = dates[0].slice(0); 
    for(var i = 1; i < dates.length; i++) { 
    if(dates[i][0].isAfter(range[1])) return null; 
    range[0] = dates[i][0]; 
    if(dates[i][1].isBefore(range[1])) { 
     range[1] = dates[i][1]; 
    } 
    } 
    return range; 
} 
function rangeToWeeks(range){ 
    if(!range) return NaN; 
    return moment.duration(range[1] - range[0]).asWeeks(); 
} 

var dates = [ 
    ['2016-1-1','2016-3-1'], 
    ['2016-2-21','2016-10-1'] 
]; 
var weeksIntersect = rangeToWeeks(intersectDateRanges(dates)); 
+0

もう1つは結果がこのようなものです4.25478結果が4.25478の場合はちょうど4、2.8457の場合は2を得ることができます – ler

+0

['Math.floor()'](https:// developer .mozilla.org/ja-jp/docs/Web/JavaScript/Reference/Global_Objects/Math/floor)。 – Ouroborus

+0

ありがとうございます – ler

-1

Dateオブジェクトを使用してください。

d = new Date('2016-1-1'); 
d1 = new Date('2016-3-1'); 
diffweeks = (d1-d)/(7*24*60*60*1000); //Subtraction returns milliseconds. 
+0

このような形式の日付は 'Date'コンストラクタに渡すべきではありません。なぜなら、すべてのブラウザで正しく解析されるとは限らないからです。 –

+0

互換性に関して 'Date.parse()'はどれくらい良いですか? –

関連する問題