获取Jquery或Javascript

时间:2016-05-01 20:27:57

标签: javascript jquery

我有两个日期范围。 [2016-1-1,2016-3-1]和[2016-2-21,2016-10-1]我希望获得使用Javascript或Jquery或任何库的这两个日期范围之间的周数。 我的意思是两个范围之间的周数,例如第一个范围是[2016-1-1,2016-3-1],第二个范围是[2016-2-21,2016-10-1]所以这两个范围之间有一周,一周是2016-2-21到2016-3-1的一周。我的意思是共同的

2 个答案:

答案 0 :(得分: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));

答案 1 :(得分:-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.