3

希望你们一切都好。

我需要检查数组中是否有任何日期

var arrayDates = ["2013-07-26", "2013-07-27"];

在日期范围内

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

我真的被困住了,开始迷惑自己。任何人都可以帮我解决这个问题。

PS 上面的日期是例如,它们将是动态的。

谢谢!

4

4 回答 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');
 }
}
于 2013-07-09T14:01:55.123 回答
3

拥有日期对象后,您可以以非常直接的方式比较它们。请参阅底部的此链接。

我看到你的问题被标记为 jquery,所以你可以这样做:

$.each(arrayDates, function(i, val) {
    if (val > endDate || val < startDate)
    {
        //Date is outside of that range
    }
});
于 2013-07-09T14:13:52.920 回答
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
于 2013-07-09T14:15:39.063 回答
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')

})
于 2013-07-09T14:13:36.540 回答