使用自定义日期格式对对象排序

时间:2017-01-06 11:45:37

标签: javascript sorting

请帮我整理。 我必须使用自定义字符串日期对对象进行排序

var object = [{
  name: "something",
  date: "23.12.2016"
},
{
  name: "something2",
  date: "19.12.2016"
}]

这样的排序对象怎么样? 我已经尝试过使用sort函数return new Date(a.date) - new Date(b.date);但没有任何东西它不起作用 谢谢!

3 个答案:

答案 0 :(得分:2)

您可以拆分日期并将其重新排列为iso日期,并按localeCompare字符串排序。

var object = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];

object.sort(function (a, b) {
    var aa = a.date.split('.'),
        bb = b.date.split('.');
  
    return [aa[2], aa[1], aa[0]].join('-').localeCompare([bb[2], bb[1], bb[0]].join('-'));
});

console.log(object);

您也可以使用String#replace重新排序字符串。

var object = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];

object.sort(function (a, b) {
    var aa = a.date.replace(/(..).(..).(....)/, '$3-$2-$1'),
        bb = b.date.replace(/(..).(..).(....)/, '$3-$2-$1');

    return aa.localeCompare(bb);
});

console.log(object);

答案 1 :(得分:1)

使用Date.parse()String.prototype.replace()函数的解决方案(按 时间戳 排序):



var date_objects = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];

date_objects.sort(function(a,b){
    return Date.parse(a.date.replace(/^(\d{2})\.(\d{2})\.(\d{4})$/, '$3-$2-$1'))
            - Date.parse(b.date.replace(/^(\d{2})\.(\d{2})\.(\d{4})$/, '$3-$2-$1'))
});

console.log(date_objects);




答案 2 :(得分:1)

出于好奇,我尝试了一个关于Nina Scholz's answer的变体,也许它更快,也许不是。我发现重新格式化日期非常明显,但它也很耗时。在我的版本中,重复索引可能是一个问题,但是as you stated that the format is zero-padded,这将起作用:

var object = [{ name: "something", date: "23.12.2016" }, { name: "something2", date: "19.12.2016" }];

object.sort(function (a, b) {
    return (a.date[6] - b.date[6]) 
        || (a.date[7] - b.date[7])
        || (a.date[8] - b.date[8])
        || (a.date[9] - b.date[9])
        || (a.date[3] - b.date[3])
        || (a.date[4] - b.date[4])
        || (a.date[0] - b.date[0])
        || (a.date[1] - b.date[1]);
});

console.log(object);