Tablesorter - 日期问题

时间:2009-12-24 14:08:06

标签: jquery tablesorter

我知道有一些问题,但我似乎无法解决我的问题。

我正在将.csv文件加载到tablesorter中,但我的一个列是日期(2009年12月23日)。但它们分类为12月2日,12月23日,12月3日,12月31日

有谁知道解决方案? You can see the problem here,它是底部的表格。非常感谢提前!

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

-

  

table width =“871”border =“0”   cellpadding =“0”cellspacing =“1”   类= “的tablesorter”   ID = “的tablesorter-演示” &GT;

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

“R”);       while(($ data = fgetcsv($ handle,1000,“,”))!== FALSE)       {           $ num = count($ data);           $行++;

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

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

“\ n” 个; // 名称           回声“”。 $ data [0]。 “\ n” 个; //符号                          回声“”。 $ data [2]。   “\ n” 个; // 买卖                          回声“”。 $ data [3]。   “\ n” 个; //约会                          回声“”。 $ data [4]。   “\ n” 个; // 分享           回声“”。 $ data [5]。 “\ n” 个; // 价钱         回声“”。 $ data [6]。 “\ n” 个; //现金价值

                   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 个答案:

答案 0 :(得分:6)

它基于字母数字(ASCII)值进行排序,而不是基于日期值(它也将在十月之前放置十月)。您需要jquery将每个单元格解释为日期值,然后相应地对它们进行排序。如果内置类型检测不起作用,则必须强制使用数据类型。有关详细信息,请参阅http://www.terminally-incoherent.com/blog/2008/09/29/jquery-tablesorter-list-of-builtin-parserssorters/

答案 1 :(得分:1)

您应该指定列的类型。否则它将按文本排序。您可以通过specyfing sorter参数:

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

虽然我不确定isoDate是否应该使用分拣机,但是tablesorter还有两个其他分拣机:usLongDateshortDate。你可以尝试哪一个能完成这项任务。

答案 2 :(得分:0)

如果没有任何默认日期排序选项有效,请尝试使用custom parser并将日期转换为等效毫秒表示以进行排序。

$.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' 
            } 
        } 
    }); 
});