JQuery DataTable Birthday Sort
I’m working on a project that uses DataTables a JQuery plug-in that turns ordinary table into dynamic tables. One of the columns includes a list of birthdays. We didn’t want the standard date sorting. We wanted the birthdays to sort primarily by month. Below you will see the custom sort algorithm I came up with to sort our birthdays.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | function sortdatatable(a,b){ //a is blank return 1 to sort after b if(a == '') return 1; //b is blank return 0 no change if(b == '') return 0; //Split dates on / //format expected is mm/dd/yyyy //array 0 is month //array 1 is day //array 1 is year var x = a.split('/'), y = b.split('/'); //Parse month strings to int for comparison var xInt = parseInt(x[0]), yInt = parseInt(y[0]); //If months are the same check days. if(xInt == yInt){ //Parse day strings to int for comparison var x1Int =parseInt(x[1]), y1Int = parseInt(y[1]); //if days are the same check years if(x1Int == y1Int){ //Parse day strings to int for comparison var x2Int = parseInt(x[2]), y2Int = parseInt(y[2]); //if years are the same return 0. //if xInt is smaller than yInt return 1 to sort after y else return -1 return x2Int == y2Int ? 0 : x2Int < y2Int ? 1 : -1; } else { //if xInt is smaller than yInt return 1 to sort after y else return -1 return x1Int < y1Int ? 1 : -1; } } else { //if xInt is smaller than yInt return 1 to sort after y else return -1 return xInt < yInt ? 1 : -1; } } jQuery.fn.dataTableExt.oSort['birthday-asc'] = function(a, b) { return -(sortdatatable(a,b)); }; jQuery.fn.dataTableExt.oSort['birthday-desc'] = function(a, b) { return sortdatatable(a,b); }; |
The meat of the sorting is the sortdatatable function. The algorithm sorts according to descending order. We compare the months first. If the months are the same we compare days and if the days are the same we compare years. If months, days, and years are all the same we return 0 to leave those two items in the same order.
The ascending and descending algorithms are the inverse of each other. So to save space in the JavaScript file we use the same function and return the -(sortdatatable(a,b)) for the ascending sort.
My Twitter
- Apple should allow people to pre order unannounced products just to see who the real #apple #fanboys are. 20 hours ago
- Started the SAAS class http://t.co/LV2EitqG Just wish it wasn't so Rails oriented. Not everyone is a #RoR #fanboy. 2012/02/21
- I can wait for the purse dog fashion statement to go away. I don't need to see your dog in the mall. 2012/02/18
- Nothing like early morning coding. Client side code clean up. #jquery #ui 2012/02/18
- RT @newsycombinator: I would rather drink piss like Bear Grylls than log in with Facebook http://t.co/4cb0kyiJ 2012/02/17
- Yesss!, @chi_llc followed me back. Woot... Woot... bring on the 3D software tweets :) 2012/02/17
- Bye Bye, Hulu+... & your silly content deals. Why can't I watch some shows on my TV! Mountian Lion just put the final nail in. 2012/02/16
- Mountain Lion looks cool. http://t.co/QFdtKD68 but I really hope Apple doesn't screw up #OSX by turning it into #iOS. 2012/02/16
- I have to say mustache.js makes front end development super easy #mustache #jquery 2012/02/15
- Nothing says Valentines Day like Twitter Spam. Thanks for the link, random spam bot with half naked picture. I'll click it later, trust me! 2012/02/14
Archives
- December 2011
- October 2011
- August 2011
- June 2011
- April 2011
- March 2011
- February 2011
- December 2010
- November 2010
- October 2010
- August 2010
- June 2010
- May 2010
- April 2010
- March 2010
- February 2010
- January 2010
- December 2009
- November 2009
- October 2009
- September 2009
- August 2009
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- September 2007
- July 2007
- June 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006






