2013-07-09 43 views
2

希望你一切安好。如何检查数组中的任何日期是否在日期范围内?

我需要从阵列

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

如果任何时间段查看在的

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

日期范围,我很坚持,并开始迷惑自己。任何人都可以帮我解决这个问题。

P.S.例如,上面的日期是动态的。

谢谢!

+0

是否要使用'Date'对象或只是文本字符串? – MathSquared

+0

你能提供一个你的代码的实例吗?正如所写的,'var startDate = 2013-07-10;'将被解释为算术并返回'1996'。 – Blazemonger

+0

我将使用Date对象。更新。 – ignaty

回答

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'); 
} 
} 
+0

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

+0

现在用示例 – Richard

+0

谢谢,它看起来合乎逻辑,但是杀死了Chrome/Safari ... – ignaty

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') 

}) 
3

后你有约会对象,你可以在一个漂亮的对它们进行比较直接的方式。在底部看到这个link

我看到你的问题是标签的jQuery,所以你可以做这样的事情:

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

什么是“date”代表什么? – ignaty

+0

哎呀,对不起。这应该是真正的“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 
相关问题