使用 jquery tablesorter 对日期进行排序的问题
-
11-09-2019 - |
题
我正在使用 tablesorter 插件对 MVC .NET 应用程序中的表进行排序。我的大部分专栏都是字符串,我对它们没有任何问题。与数字无关。问题是我的日期时间列也像字符串一样进行排序。它们的排序方式如下:01/04/2009、02/02/2009、03/08/2009 等我从该视图中的模型获取数据。
我的电话是默认电话:
$("#table").tablesorter();
我尝试指定日期格式但没有成功:
$("#table").tablesorter({
dateFormat: 'dd/mm/yyyy'});
当我手动输入带有随机日期的静态表时,奇怪的事情发生了。它得到排序!但是我的数据来自数据库调用并放入模型中,然后我对其进行迭代并用数据写入 tr。
提前致谢。
编辑:这可能与我创建 tr 的方式有关吗?
<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.date) %>
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<% } %>
解决方案
尝试添加的tablesorter分析器你的日期列。的tablesorter附带了shortDate,usLongDate和isoDate解析器。
$("#table").tablesorter({
headers: { colNum: { sorter: 'shortDate'} }
});
其中colNum是与日期的列。我能找到的网站的tablesorter唯一的例子是这里。这也适用,如果是的tablesorter排序号码错误也是如此。还有其他的解析器以及为百分之,IP地址等等。采取靠近源代码的端部的外观和它们将在那里列出。
修改强> 在着眼于源代码,dateformat选项出现“US”,“英国”,“DD / MM / YY”或“DD-MM-YY”仅被寻找。当您尝试“英国”,会发生什么?
其他提示
我得到了同样的问题,我添加了一个自定义分析器叫日期时间:
$.tablesorter.addParser({
id: "datetime",
is: function(s) {
return false;
},
format: function(s,table) {
s = s.replace(/\-/g,"/");
s = s.replace(/(\d{1,2})[\/\-](\d{1,2})[\/\-](\d{4})/, "$3/$2/$1");
return $.tablesorter.formatFloat(new Date(s).getTime());
},
type: "numeric"
});
然后,你只需要该格式适用于所需的列,如加布ģ暴露(例如此分拣机分配到应执行以下的第一列:
$("#mytable").tablesorter(
{ dateFormat: 'dd/mm/yyyy',
headers:
{
0:{sorter:'datetime'}
}
} );
您也可以以数字格式(年月日)的日期前添加一个隐藏的范围标记。本文将先出现,然后用于排序,但它会从视线中被隐藏,只显示你想要的格式。
<td><span style="display:none">20130923</span>23 September 2013</td>
有存在的jquery tablesorter插件的更新。
根据你的应用程序的语言环境,可以将日期此更新排序。
可以通过以下下面的链接查看的tablesorter的更新。
更简单的方法使用:
dateFormat:'mm/dd/yyyy hh:mm:ss'
老实说,对我来说最简单的解决方案是,正如 compsmart 所说,在实际日期前面添加一些隐藏文本。
- 日期格式:'英国' 不适合我,也许是因为我的日期格式又不同了
- http://tablesorter.openwerk.de/ 涉及修改CSS,首先我不明白为什么,其次工作量比简单地在日期前面添加隐藏文本要大。
我喜欢 compsmart 的 KISS 解决方案!
http://mottie.github.io/tablesorter/docs/
设置日期格式。以下是可用的选项。(修改v2.0.23)。
- “mmddyyyy”(默认)
- “ddmmyyy”
- “yyyymmdd”
在以前的版本中,此选项设置为“us”、“uk”或“dd/mm/yy”。修改此选项以更好地适应所需的日期格式。它只适用于四位数年份!
排序器应设置为“shortDate”,并且可以在“dateFormat”选项中设置日期格式,或者在“headers”选项中为特定列设置日期格式。请参阅演示页面以查看其工作原理。
$(function(){
$("table").tablesorter({
dateFormat : "mmddyyyy", // default date format
// or to change the format for specific columns,
// add the dateFormat to the headers option:
headers: {
0: { sorter: "shortDate" }, // "shortDate" with the default dateFormat above
1: { sorter: "shortDate", dateFormat: "ddmmyyyy" }, // day first format
2: { sorter: "shortDate", dateFormat: "yyyymmdd" } // year first format
}
});
});
可以通过添加以下内容来修改各个列(它们都执行相同的操作),按优先级顺序设置(修改后的 v2.3.1):
- jQuery 数据 data-dateFormat="mmddyyyy"。
- 元数据类=“{日期格式:'mmddyyyy'}”。这需要元数据插件。
- headers 选项标题:{ 0 :{ 日期格式 :'mmddyyyy'}}。
- 标头类名 class="dateFormat-mmddyyyy"。总体日期格式选项。
就我而言,我使用过
$("#myTable").tablesorter({dateFormat: "uk"})
对于版本。
这是回答我:
<td data-order=<fmt:formatDate pattern = "yyyy-MM-dd" value = "${myObject.myDate}" />>${myObject.myDate}</td>