ignaty
ignaty

Reputation: 535

How to check if any date from array is in date range?

Hope you are all well.

I need to check if any date from array

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

is in date range of

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

I am really stuck and started to confuse myself. Can anyone help me with that please.

P.S. Dates above are for example, they will be dynamic.

Thank you!

Upvotes: 3

Views: 6367

Answers (4)

sdm350
sdm350

Reputation: 397

After you have the date objects you can compare them in a pretty straight forward way. See this link at the bottom.

I see your question is tagged jquery, so you could do something like this:

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

Upvotes: 3

labue
labue

Reputation: 2623

Another method - 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

Upvotes: 3

Richard
Richard

Reputation: 22016

You will need to use real date objects rather than strings.

maybe have a look at using dateJs for parsing dates http://www.datejs.com/

But really you need to iterate through the array of dates and check if they fall between the tick value of your start and end dates.

Try this:

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

Upvotes: 3

kketch
kketch

Reputation: 693

Hopefully you can convert these dates to numbers and compare them, here an example :

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

})

Upvotes: 2

Related Questions