2

jQueryプラグインTablesorterを使用して日付フィールドをソートしようとしています。奇妙なことに、並べ替えが部分的に機能しているように見えます。結果が表示される順序が再配置されます。これは、少なくともスクリプトが初期化されていることを示しています。

問題の例

なぜこれが当てはまるのかわかりません。私のHTMLは次のようになります。

<link href="/themes/blue/Style.css" rel="stylesheet" type="text/css" />
<script src="/Scripts/jquery-ui-1.8.20.js" type="text/javascript"></script>
<script src="/Scripts/jquery.tablesorter.js" type="text/javascript"></script>
<script>
$(document).ready(function ()
{ 
    $("#repairtable").tablesorter(
{ 
    sortList: [[1, 0]], 
    dateFormat : "ddmmyyyy",
    headers: { 1:{ sorter: "shortDate", dateFormat: "ddmmyyyy"} }
});
} 
);
</script>
<table id="repairtable" class="tablesorter">
<thead>
<tr>
<th>ID</th>
    <th>Date In</th>
    <th>Customer</th>
</tr>
</thead>
<tbody>
<tr>
   <td>48</td>
   <td>11/03/2013</td>
   <td>Rainhem Launderette</td>
</tr>
<tr>
   <td>13</td>
   <td>10/01/2013</td>
   <td>IESA (Gunstones)</td>
</tr>
<tr>
   <td>14</td>
   <td>10/01/2013</td>
   <td>GVF</td>
</tr>
<tr>
   <td>41</td>
   <td>08/03/2013</td>
   <td>Triumph</td>
</tr>
<tr>
   <td>42</td>
   <td>08/03/2013</td>
   <td>Triumph</td>
</tr>
<tr>
   <td>43</td>
   <td>08/03/2013</td>
   <td>Triumph</td>
</tr>   
<tr>
   <td>40</td>
   <td>07/03/2013</td>
   <td>RAG Collections Ltd</td>
</tr>
<tr>
   <td>38</td>
   <td>06/03/2013</td>
   <td>WM Sinclair</td>
</tr>
<tr>
   <td>39</td>
   <td>06/03/2013</td>
   <td>WM Sinclair</td>
</tr>
<tr>
   <td>22</td>
   <td>05/03/2013</td>
   <td>IESA Weetabix B'Lat</td>
</tr>
</tbody>
</table>

適切な列ヘッダーをクリックすると、セルに格納されているデータの順序は並べ替えられますが、日付の順序が正しくありません。日/月/年で注文しようとしていますが、そうではないようです。実際には、ここに示したよりも多くのデータがテーブルに含まれています。1 つの日付フィールドは 2013 年 2 月 25 日であり、提供したスクリーンショットの 2 行目である 2013 年 10 月 1 日よりも大きいはずです。

私は Web 開発に比較的慣れていないので、何かアドバイスをいただければ幸いです。

4

2 に答える 2

6

米国には奇妙な日付規則があり、日付は月/日/年で表記される傾向があるため、そのように並べ替えています。

編集: tablesorter にはその機能が既に存在します。使用する:

$("#tableName").tablesorter({dateFormat: "uk"});

テーブルソーターに関するこの他の質問から。

于 2013-03-15T14:27:26.603 に答える
0

私がしたことは次のとおりです。プラグインの970行目あたり、ts.addParser関数で、次のコードをelse ifdateformatsに変更しました。

        if (c.dateFormat == "us") {
            // reformat the string in ISO format
            s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$1/$2");
        } else if (c.dateFormat == "uk") {
            // reformat the string in ISO format
            s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
        } else if (c.dateFormat == "dd/mm/yy" || c.dateFormat == "dd-mm-yy") {
            s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{2})/, "$1/$2/$3");
            // I added the lines below for the format with full year format,
            // Note that I inverted the day and month in the final format so
            // when the string is converted to date, it converts it right
        } else if (c.dateFormat == "dd/mm/yyyy" || c.dateFormat == "dd-mm-yyyy"){
            s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$2/$1/$3");
        }
于 2013-12-02T10:48:34.857 に答える