我正在尝试使用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>
单击相应的列标题会对单元格中存储的数据的顺序进行排序,但它会错误地排序日期。我试图按天/月/年订购它们,但它似乎没有这样做。表中的数据实际上比我在此处显示的数据更多,一个日期字段是25/02/2013,应该高于10/01/2013,这是我提供的屏幕截图中的第二行。
我对网络开发相对较新,任何指针都会非常感激。
答案 0 :(得分:6)
美国有一个奇怪的约会惯例,其中日期往往以月/日/年的形式写出,所以它会像那样排序。
编辑:tablesorter中已存在该功能。使用:
$("#tableName").tablesorter({dateFormat: "uk"});
答案 1 :(得分:0)
我做的是:在插件中,在第970行,在ts.addParser
函数中,我将以下代码更改为else if
日期格式:
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");
}