我有两个日期范围。 [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的一周。我的意思是共同的
答案 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.