2016-04-06 19 views
1

私は、jsonデータによっての日付をソートしようとしていますが、動作しません。ここに私がしようとしているものがあります。私はそれがISO 6801日付しているときに、並べ替えの日付文字列を使用することができます間違いJSONデータを日付でソートします。

サンプルコード

var temp = [{ 
    "id": 17608, 
    "title": "abc", 
    "start": "2016-03-23 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}, { 
    "id": 17608, 
    "title": "def", 
    "start": "2016-04-13 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}, { 
    "id": 17608, 
    "title": "ghi", 
    "start": "2016-04-08 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}]; 

console.log(temp); 

temp.sort(function(a, b) { 
    if (new Date(a.start) == new Date(b.start)) { 
     return a.row == b.row ? 0 : +a.row > +b.row ? 1 : -1; 
    } 

    return new Date(a.start) > (b.start) ? 1 : -1; 
}); 

console.log(temp); 
+2

これはJSONではありません!それはオブジェクトを持つJavascript配列です。 – deceze

答えて

6

を作っていますどこに私を修正してください。日付を比較しながら

var temp = [{ "id": 17608, "title": "abc", "start": "2016-03-23 06:13:00.0", "backgroundColor": "#000000", "borderColor": "#000000", "textColor": "#fff" }, { "id": 17608, "title": "def", "start": "2016-04-13 06:13:00.0", "backgroundColor": "#000000", "borderColor": "#000000", "textColor": "#fff" }, { "id": 17608, "title": "ghi", "start": "2016-04-08 06:13:00.0", "backgroundColor": "#000000", "borderColor": "#000000", "textColor": "#fff" }]; 
 

 
temp.sort(function (a, b) { 
 
    return a.start.localeCompare(b.start); 
 
}); 
 

 
document.write("<pre>" + JSON.stringify(temp, 0, 4) + "</pre>");

2

あなたはdate.getTime()を使用する必要があります。

var temp= [{id:17608,title:"abc",start:"2016-03-23 06:13:00.0",backgroundColor:"#000000",borderColor:"#000000",textColor:"#fff"},{id:17608,title:"def",start:"2016-04-13 06:13:00.0",backgroundColor:"#000000",borderColor:"#000000",textColor:"#fff"},{id:17608,title:"ghi",start:"2016-04-08 06:13:00.0",backgroundColor:"#000000",borderColor:"#000000",textColor:"#fff"}]; 
 

 
console.log(temp); 
 

 
temp.sort(function(a, b) { 
 
    var d1 = new Date(a.start).getTime(); 
 
    var d2 = new Date(b.start).getTime(); 
 
    return d1<d2?-1:d1>d2?1:0; 
 
}); 
 

 
console.log(temp);

2

あなたのコードは結構です、それはあなたがあなたの比較で二new Date()が欠落していることだけです:

return new Date(a.start) > (b.start) ? 1 : -1; 

は次のようになります。

return new Date(a.start) > new Date(b.start) ? 1 : -1; 

今のところ、単純に比較しているのですDateオブジェクトをstringに転送します。

2

これを達成する方法は複数あります。このうち、最も簡単には日付に文字列を変換して、負正またはゼロの数を取得するために、互いからそれらを減算することになります。

temp.sort(function(a,b){ 
    return new Date(a.start) - new Date(b.start); 
}); 

多くの場合、ソート機能が-1を返す必要があると考えられている、1または0。これは単に真実ではありません。数字がが正の場合,が負の場合またはの場合にアイテムを並べ替えます。 X = Y、または正の値であれば、comparefnが未定義でない場合、それは二つの引数xとyを受け入れ、そしてx < yの場合は負の値を返す関数であるべきである

ゼロ:ECMAScript specificationはそれをのように述べてx> yならば

全例:

var temp = [{ 
    "id": 17608, 
    "title": "abc", 
    "start": "2016-03-23 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}, { 
    "id": 17608, 
    "title": "def", 
    "start": "2016-04-13 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}, { 
    "id": 17608, 
    "title": "ghi", 
    "start": "2016-04-08 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}]; 

console.log(temp); 

temp.sort(function(a,b){ 
    // Convert strings to dates and substract. 
    // This way you get a value which is negative, positive or zero 
    return new Date(a.start) - new Date(b.start); 
}); 

console.log(temp); 
-1
var temp = [{ 
    "id": 17608, 
    "title": "abc", 
    "start": "2016-03-23 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}, { 
    "id": 17608, 
    "title": "def", 
    "start": "2016-04-13 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}, { 
    "id": 17608, 
    "title": "ghi", 
    "start": "2016-04-08 06:13:00.0", 
    "backgroundColor": "#000000", 
    "borderColor": "#000000", 
    "textColor": "#fff" 
}]; 

console.log(temp); 

temp.sort(function(a, b) { 
    return parseFloat(a.start) - parseFloat(b.start); 
}); 

console.log(temp); 
+0

は年単位でソートされます。 –

関連する問題