4

I have an array with different dates with the format of year-month-day.

something like this:

var dates = ["2016-08-01", "2016-08-09", "2016-08-10", ....];

I also have a function that formats todays date in the same format as above. And is stored in a variable:

var currentDate; //Contains current date in the format of year-month-day

What i need to do is to check if any of the dates in the array, either:

  • Match with today's date.- e.g. Today would be 2016-08-13
  • Match with 14 days back from today's date. - e.g. 14 days back from today (2016-08-13) would be 2016-07-30
  • Or match with any dates between the current and 14 days back.

I'm trying to do this by looping through the array, checking each value. But im unsure about the if condition/conditions

    for(var i = 0; i < dates.length; i++) {
      if(currentDate === *condition*) {
        sendDate(dates[i]);
      } 
    }

Anyone have a good solution for this? Thanks in advance!

qua1ity
  • 565
  • 2
  • 8
  • 27
  • It seems you don't care about current date at all, you only care about 14 days before/after today. Start with having these values in variables and use standard greater-than/less-than operators. – Amit Aug 13 '16 at 18:36
  • What do you mean? The current date is obviously important since it's different every day. – qua1ity Aug 13 '16 at 18:43

3 Answers3

3

Firstly, create a new Date() from your currentDate ( currentDate is string format Y-d-m with hour and minutes is 00:00)

var current = new Date(currentDate);
var matchWithCurrent = [];
var matchWithDayBack = [];
var between = [];

just loop through your date array

for (var i=0; i<dates.length; i++) {

    var tmpDate = new Date(dates[i]); //Convert string to date
    var diff = Math.ceil((current - tmpDate) / (1000 * 3600 * 24)); //get time difference (current - tmpDate is milisecond, we need convert it to day)

    // Check condition and push it on array correct

    if (diff == 0) {
        matchWithCurrent.push(dates[i]);
    }

    if (diff == 14) {
        matchWithDayBack.push(dates[i]);
    }

    if ((diff > 0) && (diff <14)) {
        between.push(dates[i]);
    }

}

console.log(matchWithCurrent);
console.log(matchWithDayBack);
console.log(between);

If you want only one array match with 3 condition just check 3 condition in only one if and push it into your result array

Dinh Phong
  • 596
  • 3
  • 12
2

One way would be to parse the dates to millisecond values and compare them.

var todayParts = currentDate.split('-');
var today = new Date(todayParts[0], todayParts[1], todayParts[2]).getTime();
var otherParts = dates[i].split('-');
var other = new Date(otherParts[0], otherParts[1], otherParts[2]).getTime();

if (today < other + 1209600000 /* 2 weeks in milliseconds */) {
    // The other date is less than 2 weeks before today
}

You can read here why I parsed it manually instead of using Date.parse().

Community
  • 1
  • 1
Tomasz Nocoń
  • 316
  • 2
  • 8
0
You can compare two dates something like that:
var currentDate = new Date();
 for(var i = 0; i < dates.length; i++) {<br>
 var arrDate = new Date(dates[i]);
    if(currentDate == arrDate)
    {//compare array dates with current date
        //your code here
    }
 var beforeDate = (currentDate.getDate() - 14); //14 days before
    if(arrDate >= beforeDate && arrDate <= currentDate){
        //compare dates between current date and 14 days before date
    } 
  }
Mohit Tiwari
  • 165
  • 2
  • 6