CuriousJ
CuriousJ

Reputation: 113

How to format date in ag grid and how to compare/sort in the ag- grid?

This code is to compare the dates only. And I am looking to compare the time as well. Can anyone give the correct solution to this for angular 8 solution?

 {headerName: 'Start Date', field: 'CreatedDate', sortable:true,
          cellRenderer: (data) => {
            return data.value ? (new Date(data.value)).toLocaleDateString() : '';
         }, comparator: dateComparator}

function dateComparator(date1, date2) {
  var date1Number = monthToComparableNumber(date1);
  var date2Number = monthToComparableNumber(date2);
  if (date1Number === null && date2Number === null) {
    return 0;
  }
  if (date1Number === null) {
    return -1;
  }
  if (date2Number === null) {
    return 1;
  }
  return date1Number - date2Number;
}
function monthToComparableNumber(date) {
  if (date === undefined || date === null || date.length !== 10) {
    return null;
  }
  var yearNumber = date.substring(6, 10);
  var monthNumber = date.substring(3, 5);
  var dayNumber = date.substring(0, 2);
  var result = yearNumber * 10000 + monthNumber * 100 + dayNumber;
  return result;

}

Upvotes: 2

Views: 11119

Answers (1)

abhim
abhim

Reputation: 1186

function dateComparator(date1, date2) {
  var date1Number = date1 && new Date(date1).getTime();
  var date2Number = date2 && new Date(date2).getTime();

  if (date1Number == null && date2Number == null) {
    return 0;
  }

  if (date1Number == null) {
    return -1;
  } else if (date2Number == null) {
    return 1;
  }

  return date1Number - date2Number;
}

I'd use the double equals instead of the triple equals because date1Number == null also checks for undefined.

Upvotes: 8

Related Questions