0

わかりました、HTML テーブルの日付で行を並べ替える JavaScript コードがあります。ここで私が行ったことは、日付をタイムスタンプに変換し、ネイティブの sort() JavaScript 関数で並べ替えることでしたが、並べ替えが正しくないようです。何が問題ですか?タイムスタンプで日付を並べ替えるのは間違っていますか?

これが私がこれまでに行ったことです

var asc = true;

    function sortTable() {
        var tbl = document.getElementById("mytable").tBodies[0];
        var store = [];
        for (var i = 0, len = tbl.rows.length; i < len; i++) {
            var row = tbl.rows[i];
            var rowdatedata = row.cells[1].textContent;
            var rowdatesplit = rowdatedata.split('/');
            var rowdatetimestamp = Math.round(new Date(parseInt(rowdatesplit[0]), parseInt(rowdatesplit[1]) - 1, parseInt(rowdatesplit[2]), 0, 0, 0).getTime() /1000);
            if (!isNaN(rowdatetimestamp)) store.push([rowdatetimestamp, row]);
        }

        if (asc) {
            store.sort(function(x, y) {
                return x[0] - y[0];
            });
            document.getElementById('dateCol').textContent = 'Date ↑';
            asc = false;
        }
        else {
            store.sort(function(x, y) {
                return y[0] - x[0];
            });
            document.getElementById('dateCol').textContent = 'Date ↓';
            asc = true;
        }

        for (var i = 0, len = store.length; i < len; i++) {
            var idno = i + 1;
            store[i][1].cells[0].textContent = idno.toString();
            tbl.appendChild(store[i][1]);
        }
        store = null;
    }

http://jsfiddle.net/laupkram/kCxKn/

注:「日付」ヘッダーをクリックするだけでソートされます

昇順の結果

ID  Date ↑  Name
1   2012/08/15  Lerry
2   2012/03/16  Ansley
3   2012/05/18  Robinson
4   2012/10/05  Mp

降順結果

ID  Date ↓  Name
1   2012/10/05  Mp
2   2012/05/18  Robinson
3   2012/03/16  Ansley
4   2012/08/15  Lerry
4

1 に答える 1

3

問題はparseInt、数値が 0 で始まる場合、8 進数として扱う方法です。parseInt(value, 10)10 進変換を確実にするために行う必要があります。

于 2012-10-19T07:33:02.580 に答える