假设我有一个包含几个对象的数组:

var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];

如何按日期元素排序这个数组,从最接近当前日期和时间的日期下来?请记住,数组可能有许多对象,但为了简单起见,我使用2。

我会使用排序函数和自定义比较器吗?


当前回答

如果像我一样,你有一个日期格式为YYYY[-MM[-DD]]的数组,你想在不太特定的日期之前排序更具体的日期,我想出了这个方便的函数:

function sortByDateSpecificity(a, b) {
  const aLength = a.date.length
  const bLength = b.date.length
  const aDate = a.date + (aLength < 10 ? '-12-31'.slice(-10 + aLength) : '')
  const bDate = b.date + (bLength < 10 ? '-12-31'.slice(-10 + bLength) : '')
  return new Date(aDate) - new Date(bDate)
}

其他回答

如果像我一样,你有一个日期格式为YYYY[-MM[-DD]]的数组,你想在不太特定的日期之前排序更具体的日期,我想出了这个方便的函数:

function sortByDateSpecificity(a, b) {
  const aLength = a.date.length
  const bLength = b.date.length
  const aDate = a.date + (aLength < 10 ? '-12-31'.slice(-10 + aLength) : '')
  const bDate = b.date + (bLength < 10 ? '-12-31'.slice(-10 + bLength) : '')
  return new Date(aDate) - new Date(bDate)
}

我能够实现排序使用以下行:

array.sort(function(a, b)
{
   if (a.DueDate > b.DueDate) return 1;
   if (a.DueDate < b.DueDate) return -1;
})

你可以在下划线js中使用sortBy。

http://underscorejs.org/#sortBy

示例:

var log = [{date: '2016-01-16T05:23:38+00:00', other: 'sample'}, 
           {date: '2016-01-13T05:23:38+00:00',other: 'sample'}, 
           {date: '2016-01-15T11:23:38+00:00', other: 'sample'}];

console.log(_.sortBy(log, 'date'));

Arr是一个对象数组,每个对象都有date_prop,它是一个日期。你可以像这样按降序/递减排序

 arr = arr.sort(function (a, b) {
      var dateA = new Date(a.date_prop).getTime();
      var dateB = new Date(b.date_prop).getTime();
      return dateA < dateB ? 1 : -1; // ? -1 : 1 for ascending/increasing order
    });

对于任何想要按日期(英国格式)排序的人,我使用以下方法:

//Sort by day, then month, then year
for(i=0;i<=2; i++){
    dataCourses.sort(function(a, b){

        a = a.lastAccessed.split("/");
        b = b.lastAccessed.split("/");

        return a[i]>b[i] ? -1 : a[i]<b[i] ? 1 : 0;
    }); 
}