Javascript日期小于或等于仅返回小于

时间:2013-11-26 20:50:07

标签: javascript jquery date datepicker

我有一个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;
};

2 个答案:

答案 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)
//