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

Javascript date less than or equal to returning only less than

本文关键字:小于 返回 日期 Javascript      更新时间:2023-11-18

我有一个jQuery日期选择器工具,返回最大和最小日期。日期用于从数组中筛选出结果。我使用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日至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;
};

问题可能是由于最长日期的时间分量设置为00:00 AM-数组中发生在最长日期上的所有项目都可能被筛选掉,因为它们发生在00:00 AM之后的某个时间。

要解决此问题,最好的方法是将最大日期更改为晚上11:59:59的时间分量,或者将最大日期设置为第二天的00:00,并使用小于(而不是小于或等于)。

我不完全确定我是否理解你想做什么,所以如果这不是你需要的,我很抱歉,但如果你只是想过滤一系列日期,我会尝试下面的方法。您需要确保将Date对象与另一个Date对象进行比较,并且数组中的值已格式化,以便生成有效的Date对象。

我不确定jQuery函数是如何工作的,但使用普通的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)
//