我有一个jQuery datepicker工具返回最大和最小日期。 日期是过滤掉数组的结果。我使用jQuery.grep根据日期进行过滤。出于某种原因,当> =将起作用时,< =仅返回小于。
// Function to filter based on date minimum
function filterListGreaterThan(filter, list, min){
var result = jQuery.grep(list, function (obj){
return new Date(obj[filter]) >= min;
});
return result;
};
function filterListLessThan(filter, list, max){
var result = jQuery.grep(list, function (obj){
return new Date(obj[filter]) <= max;
});
return result;
};
所以如果我放入2013年11月1日 - 2013年11月5日它将只返回11月1日 - 11月4日......我不知道为什么。
编辑:Mac给了我正确答案。比较日期jQuery将时间设置为午夜。所以即使我在正确的一天搜索它,它也不会在午夜过后。这是更正功能:
// Function to filter based on date maximum
function filterListLessThan(filter, list, max){
var result = jQuery.grep(list, function (obj){
//add time to date because jQuery sets the time at 00:00:00
max.setHours(23,59,59);
return new Date(obj[filter]) <= max;
})
return result;
};
答案 0 :(得分:1)
似乎问题可能是由于最大日期的时间组件设置为00:00 AM - 在最大日期发生的阵列中的所有项目可能都被过滤掉,因为它们发生在00:00 AM之后的某个时间
要解决此问题,最好的方法是将最长日期更改为时间组件为晚上11:59:59,或者将最大日期设置为次日00:00 AM并使用小于(而不是小于或等于)。
答案 1 :(得分:0)
我不完全确定我理解你要做什么,所以如果这不是你需要的,那么道歉,但如果你只想过滤一系列日期,我会尝试下面这样的事情。 您需要确保将Date对象与另一个Date对象进行比较,并确保对数组中的值进行格式化,以便生成有效的Date对象。
我不确定jQuery函数是如何工作的,但是使用vanilla javascript我会做这样的事情来过滤日期:
var list = ['2013,10,01','2013,10,02','2013,10,03','2013,10,04','2013,10,05',
'2013,10,06'];
function filterListGreaterThan(list, min_date){
var filtered_dates = [];
for(var i=0; i < list.length; i++){
var parts = list[i].split(','),
test_date = new Date(parts[0],parts[1],parts[2]);
if(test_date >= min_date){
filtered_dates.push(test_date);
}
}
return filtered_dates;
}
var min_date = new Date('2013','10','04'),
dates = filterListGreaterThan2(list, min_date);
console.log(dates);
//RETURNS:
//Mon Nov 04 2013 00:00:00 GMT+0000 (GMT Standard Time)
//Tue Nov 05 2013 00:00:00 GMT+0000 (GMT Standard Time)
//Wed Nov 06 2013 00:00:00 GMT+0000 (GMT Standard Time)
//