2017-02-26 123 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; }