2017-02-26 49 views
0

我有一个对象的数组,具有日期和时间的属性,即时通讯尝试按desc或asc排序,但它不工作,它得到所有混合DA数组。排序日期数组TimeTime

我的代码:

var myDateTime = [ 
    {date: "2016-06-08 18:10:00"}, 
    {date: "2016-04-26 20:01:00"}, 
    {date: "2017-02-06 14:38:00"}, 
    {date: "2017-01-18 17:30:21"}, 
    {date: "2017-01-18 17:24:00"} 
]; 

var sortIt = myDateTime.sort(function(a, b) { 
    return new Date(a.date) < new Date(b.date); 
}); 
+0

决不解析与Date构造函数的字符串(或Date.parse,两者是等价的解析)的分析在很大程度上是依赖于实现和不一致。 '新日期(a.date)'在Safari中返回无效日期。此外,* sort *函数应返回小于零,零或大于零的值。返回一个布尔值将被转换为0或1,所以不会正确排序。 – RobG

回答

0

排序要求0,1或-1的值。

adate = new Date(a.date) 
bdate = new Date(b.date) 
return adate > bdate ? -1 : adate < bdate ? 1 : 0 

或者更简单,

array.sort(function(a,b){ 
    return new Date(b.date) - new Date(a.date); 
}); 
0

这应该做的伎俩:

var sortIt = myDateTime.sort(function(a, b) { 
         var dateA = new Date(a.date); 
         var dateB = new Date(b.date); 
         return dateA < dateB ? -1 :(dateA > dateB ? 1 : 0); 
        }); 
0

随着ISO 8601日期,你可以只使用。

var myDateTime = [{ date: "2016-06-08 18:10:00" }, { date: "2016-04-26 20:01:00" }, { date: "2017-02-06 14:38:00" }, { date: "2017-01-18 17:30:21" }, { date: "2017-01-18 17:24:00" }]; 
 

 
myDateTime.sort(function (a, b) { 
 
    return a.date.localeCompare(b.date); 
 
}); 
 

 
console.log(myDateTime);
.as-console-wrapper { max-height: 100% !important; top: 0; }