Tablesorter - Проблема с датами - PullRequest
       13

Tablesorter - Проблема с датами

5 голосов
/ 24 декабря 2009

Я знаю, что были некоторые вопросы по этому поводу, но я не могу решить мою проблему.

Я загружаю файл .csv в TableSorter, но один из моих столбцов - даты (23 декабря 2009 г.) Но они сортируются как 2 декабря, 23 декабря, 3 декабря, 31 декабря

Кто-нибудь знает решение? Вы можете увидеть проблему здесь , это таблица внизу. Большое спасибо заранее!

<script type="text/javascript" charset="utf-8">
  $(document).ready(function() 
      { 
          $("#tablesorter-demo2").tablesorter({ widgets: ['zebra'] });
      } 
  );
 </script>

-

ширина таблицы = "871" border = "0" cellpadding = "0" cellspacing = "1" класс = "TableSorter" ID = "TableSorter-демонстрационная">

$row = 1;
$handle = fopen("csv/canadatransactions.csv",

"г"); while (($ data = fgetcsv ($ handle, 1000, ","))! == FALSE) { $ num = count ($ data); $ Строки ++;

                if ($row == 2)
               {
                   echo "<thead>\n<tr>\n";

                   echo "<th class=\"header\">" . $data[1] .

"\ п"; // название эхо "". $ data [0]. "\ П"; // условное обозначение эхо "". $ data [2]. "\ П"; // Купи продай эхо "". $ data [3]. "\ П"; // Дата эхо "". $ data [4]. "\ П"; // акции эхо "". $ data [5]. "\ П"; // цена эхо "". $ data [6]. "\ П"; // денежная стоимость

                   echo "</tr>\n</thead>\n<tbody>";
               }

               else
               {
                   echo "<tr class=\"even\"";
                   echo ">\n";
                   echo "<td>" . $data[1] . "</td>\n";
    echo "<td>" . $data[0] . "</td>\n";
    echo "<td>" . $data[2] . "</td>\n";
    echo "<td>" . $data[3] . "</td>\n";
    echo "<td>" . $data[4] . "</td>\n";
    echo "<td>C$ " . $data[5] . "</td>\n";
    echo "<td>C$ " . $data[6] . "</td>\n";

                   $transactions = $row - 3;
 }
}
fclose($handle);
?>
            </tbody>
</table>

Ответы [ 3 ]

6 голосов
/ 24 декабря 2009

Сортировка основана на алфавитно-цифровых (ASCII) значениях, а не на значениях даты (это также будет указывать ноябрь до октября). Вам нужно jquery, чтобы интерпретировать каждую ячейку как значение даты, а затем сортировать их соответственно. Если их встроенное определение типа не работает, вы должны принудительно установить тип данных. См. http://www.terminally -incoherent.com / blog / 2008/09/29 / jquery-tablesorter-list-of-builtin-parserssorters / для получения дополнительной информации.

1 голос
/ 24 декабря 2009

Вы должны указать тип столбца. В противном случае он будет отсортирован как текст. Вы можете сделать это, указав sorter параметр:

<table>
<thead>
    <tr>
        <th>Id</th>
        ... other columns ....
        <th class="{sorter: 'isoDate'}">Date</th>
</tr>           
</thead>
<tbody>
... table body ....

Хотя я не уверен, является ли isoDate сортировщиком, который вы должны использовать, но у TableSorter есть два других сортировщика: usLongDate и shortDate. Вы можете попробовать, кто из них сделает эту работу.

0 голосов
/ 24 декабря 2009

Если ни один из параметров сортировки даты по умолчанию не работает, попробуйте использовать настраиваемый анализатор и преобразовать дату в эквивалентное представление в миллисекундах для сортировки.

$.tablesorter.addParser({ 
    // set a unique id 
    id: 'dateMS', 
    is: function(s) { 
        // return false so this parser is not auto detected 
        return false; 
    }, 
    format: function(s) { 
        var d = Date.parse(s);
        if (isNaN(d)) {
           return -1;
        }
        return d;
    }, 
    // set type, either numeric or text 
    type: 'numeric' 
});     

$(function() { 
    $("table").tablesorter({ 
        headers: { 
            6: { 
                sorter:'dateMS' 
            } 
        } 
    }); 
}); 
...