如何检查数组中的任何日期是否在日期范围内?

3
希望您一切安好。
我需要检查数组中是否有任何日期。
var arrayDates = ["2013-07-26", "2013-07-27"];

在日期范围内

var startDate = new Date("2013-07-10");
var endDate = new Date("2013-07-10");

我真的卡住了,开始搞混了。 有人可以帮我解决这个问题吗?

注:上面的日期只是示例,它们将是动态的。

谢谢!


你会使用 Date 对象还是仅使用文本字符串? - ameed
你能提供一份实际的代码示例吗?按照现有的写法,var startDate = 2013-07-10;将被解释为算术运算,并返回1996 - Blazemonger
我将使用日期对象。已更新。 - ignaty
4个回答

3

您需要使用真正的日期对象而不是字符串。

也许可以考虑使用dateJs来解析日期 http://www.datejs.com/

但实际上,您需要遍历日期数组,并检查它们是否落在起始日期和结束日期的刻度值之间。

请尝试以下操作:

var arrayDates = [];

arrayDates.push(new Date(2013, 7 , 26));
arrayDates.push(new Date(2013, 7 , 27));

var startDate = new Date("2013-07-10");
var endDate = new Date("2013-07-10");

for(i = 0; i < arrayDates.length; i++){
if(arrayDates[i] >= startDate &&   arrayDates[i] <= endDate) {
   alert('Yes');
 }
}

我不能使用任何外部库... 你有没有任何代码示例,可以“遍历日期数组并检查它们是否落在开始和结束日期的刻度值之间”?谢谢! - ignaty

3

在获取了日期对象之后,你可以以非常直观的方式进行比较。请参见底部的链接

我看到你的问题被标记为jQuery,所以你可以像这样操作:

$.each(arrayDates, function(i, val) {
    if (val > endDate || val < startDate)
    {
        //Date is outside of that range
    }
});

"date" 代表什么意思? - ignaty
抱歉,应该是“val”,我已经编辑了我的回复。 - sdm350

3
另一种方法 - http://jsfiddle.net/Mh5vn/
var ds = ["2013-07-26", "2013-07-27"];

Array.prototype.between = function(arg) {
    var d1 = new Date(this[0]),
        d2 = new Date(this[1]),
        d3 = new Date(arg);

    return (d1.getTime() <= d3.getTime() && d3.getTime() <= d2.getTime());
}

console.log( ds.between('2013-07-26') );
// true

console.log( ds.between('2013-07-28') );
// false

2
希望你能把这些日期转换为数字并进行比较,以下是一个示例:
var arrayDates = ["2013-07-26", "2013-07-27"];

var unDash = function (string) {

    return string.replace(/-/g, "")

}

var dateInRange = function (date, startDate, endDate) {

    date = unDash(date)
    startDate = unDash(startDate)
    endDate = unDash(endDate)

    return date > startDate && date < endDate

}

// You now filter your array to retrieve your dates
var dates = arrayDates.filter(function (date) {

    return dateInRange(date, '2013-07-10', '2013-07-31')

})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接