verlager
verlager

Reputation: 876

Filter javascript object listing by "date" in format YYYY/MM/DD

Trying to filter js object listing by displaying only those records with an Expires date greater than or equal to today where today's date is formatted as YYYY.MM.DD

 window.members = [
      {
        LastName: "MacKenzie",
        FirstName: "Randy",
        Expires: "2019.08.12"
      },
      {
        LastName: "Ahmed",
        FirstName: "Jamshed",
        Expires: "2017.10.05"
      },
      {
        LastName: "Attaya",
        FirstName: "Jim",
        Expires: "2018.01.12"
      },
    ];
    
$(document).ready(function () {
  window.members.filter(function (members) {
    return members.Expires >= "2017.08.30";
  });


  var html = "";
  for (var i = 0; i < window.members.length; i++) {
    html+="<div class='members-name'>";
    html+=""+window.members[i].LastName+",  ";
    html+=""+window.members[i].FirstName+" </div><div class='members-exp'>";
    html+=""+window.members[i].Expires+"  </div>";
  }

  $("div").html(html);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div"></div>

Upvotes: 0

Views: 419

Answers (2)

Thijs
Thijs

Reputation: 2351

I've added an item to your array with a date that is before today. As you can see in the output, it is filtered out of the array.

 window.members = [
      { 
        LastName: "Test",
        FirstName: "Test",
        Expires: "2015.01.01"
      },
      {
        LastName: "MacKenzie",
        FirstName: "Randy",
        Expires: "2019.08.12"
      },
      {
        LastName: "Ahmed",
        FirstName: "Jamshed",
        Expires: "2017.10.05"
      },
      {
        LastName: "Attaya",
        FirstName: "Jim",
        Expires: "2018.01.12"
      },
    ];
    
$(document).ready(function () {
  // Create a new date object, it will be the current date.
  var today = new Date();
  // Set all time components to 0 so the date is at midnight.
  today.setHours(0, 0, 0, 0);

  // Get a new array with only the members that have an expiration date
  // that falls on today or later.
  var filteredMembers = window.members.filter(function (members) {
    return (new Date(members.Expires).getTime() >= today.getTime());
  });

  // Initialize the string to hold the HTML to add to the DOM.
  var html = "";
  // Iterate over all the members that passed the filter.
  filteredMembers.forEach(member => {
    // Add the HTML for the member to the string.
    html += `<div class="members-name">${member.LastName}, ${member.FirstName}</div><div class="members-exp">${member.Expires}</div>`;
  });

  // Assign the constructed string to the div.
  $("div").html(html);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div"></div>

Upvotes: 1

Nathan
Nathan

Reputation: 1520

new Date() returns the date today on your timezone.

var newDate = new Date();
newDate.setHours(0,0,0,0);
for (var i = 0; i < window.members.length; i++) {
   var expiresDate = new Date(window.members[i].Expires);
   //equality operators require you to use getTime()
   if(expiresDate.getTime() >= newDate.getTime()){
       html+="<div class='members-name'>";
       html+=""+window.members[i].LastName+",  ";
       html+=""+window.members[i].FirstName+" </div><div class='members-exp'>";
       html+=""+window.members[i].Expires+"  </div>";
   }

}

Upvotes: 0

Related Questions