How to sort an object array by date property? How to sort an object array by date property? javascript javascript

How to sort an object array by date property?


Simplest Answer

array.sort(function(a,b){  // Turn your strings into dates, and then subtract them  // to get a value that is either negative, positive, or zero.  return new Date(b.date) - new Date(a.date);});

More Generic Answer

array.sort(function(o1,o2){  if (sort_o1_before_o2)    return -1;  else if(sort_o1_after_o2) return  1;  else                      return  0;});

Or more tersely:

array.sort(function(o1,o2){  return sort_o1_before_o2 ? -1 : sort_o1_after_o2 ? 1 : 0;});

Generic, Powerful Answer

Define a custom non-enumerable sortBy function using a Schwartzian transform on all arrays :

(function(){  if (typeof Object.defineProperty === 'function'){    try{Object.defineProperty(Array.prototype,'sortBy',{value:sb}); }catch(e){}  }  if (!Array.prototype.sortBy) Array.prototype.sortBy = sb;  function sb(f){    for (var i=this.length;i;){      var o = this[--i];      this[i] = [].concat(f.call(o,o,i),o);    }    this.sort(function(a,b){      for (var i=0,len=a.length;i<len;++i){        if (a[i]!=b[i]) return a[i]<b[i]?-1:1;      }      return 0;    });    for (var i=this.length;i;){      this[--i]=this[i][this[i].length-1];    }    return this;  }})();

Use it like so:

array.sortBy(function(o){ return o.date });

If your date is not directly comparable, make a comparable date out of it, e.g.

array.sortBy(function(o){ return new Date( o.date ) });

You can also use this to sort by multiple criteria if you return an array of values:

// Sort by date, then score (reversed), then namearray.sortBy(function(o){ return [ o.date, -o.score, o.name ] };

See http://phrogz.net/JS/Array.prototype.sortBy.js for more details.


@Phrogz answers are both great, but here is a great, more concise answer:

array.sort(function(a,b){return a.getTime() - b.getTime()});

Using the arrow function way

array.sort((a,b)=>a.getTime()-b.getTime());

found here: Sort date in Javascript


After correcting the JSON this should work for you now:

var array = [{id: 1, date:'Mar 12 2012 10:00:00 AM'}, {id: 2, date:'Mar 8 2012 08:00:00 AM'}];array.sort(function(a, b) {    var c = new Date(a.date);    var d = new Date(b.date);    return c-d;});