使用jquery tablesorter排序日期的问题

时间:2009-07-07 12:02:37

标签: jquery asp.net-mvc tablesorter

我正在使用tablesorter插件在MVC .NET App中对表进行排序。我的大多数列都是字符串,我对它们没有任何问题。没有数字的。事情是我的日期时间列也被排序,好像它们是字符串。它们的排序方式如下:01/04 / 2009,02 / 02 / 2009,300 / 08/2009等。我在该视图中从模型中获取数据。

我的电话是默认电话:

$("#table").tablesorter();

我尝试过没有运气指定dateformat:

$("#table").tablesorter({
            dateFormat: 'dd/mm/yyyy'});

当我手动输入具有随机日期的静态表时,会发生奇怪的事情。它被排序了!但是我的数据来自数据库调用并被放入模型中,然后我通过它来编写数据并写入数据。

提前致谢。

编辑:这可能与我创建tr的方式有关吗?

<% foreach (var item in Model) { %>
<tr>
<td>
<%= Html.Encode(item.date) %>
</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
<% } %>

8 个答案:

答案 0 :(得分:26)

尝试将Tablesorter解析器添加到日期列。 Tablesorter附带了一个用于shortDate,usLongDate和isoDate的解析器。

$("#table").tablesorter({
    headers: { colNum: { sorter: 'shortDate'} }
});

其中colNum是包含日期的列。我在tablesorter网站上找到的唯一例子是here。如果tablesorter也将数字排序错误,这也有效。还有其他解析器,包括百分比,IP地址等。看看源代码的末尾,它们将被列在那里。

修改 在查看源代码时,dateFormat选项似乎只查找“us”,“uk”,“dd / mm / yy”或“dd-mm-yy”。当你尝试“英国”时会发生什么?

答案 1 :(得分:16)

我遇到了同样的问题,我添加了一个名为datetime的自定义解析器:

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

然后你只需要将这种格式应用到你想要的列,就像Gabe G公开的那样(例如,要将这个分类器分配到第一列,你应该执行以下操作:

$("#mytable").tablesorter( 
    {   dateFormat: 'dd/mm/yyyy', 
        headers: 
            {
                0:{sorter:'datetime'}
            } 
    } ); 

答案 2 :(得分:7)

您还可以在日期之前以数字格式(yyyymmdd)添加隐藏的范围标记。此文本将首先出现并用于排序,但它将隐藏在视线之外,仅显示您想要的格式。

    <td><span style="display:none">20130923</span>23 September 2013</td>    

答案 3 :(得分:2)

jquery tablesorter插件存在更新。

根据您的应用程序的区域设置,您可以按此更新对日期进行排序。

您可以按照以下链接查看tablesorter的更新。

http://tablesorter.openwerk.de/

答案 4 :(得分:0)

使用方便:

dateFormat:'mm/dd/yyyy hh:mm:ss'

答案 5 :(得分:0)

老实说,对我来说最简单的解决方案是,正如compsmart所说,在实际日期前添加一些隐藏文字。

  • dateFormat:'uk'对我不起作用,可能是因为我的日期格式再次不同
  • http://tablesorter.openwerk.de/涉及修改CSS,首先我不明白为什么,第二项努力比在日期前添加隐藏文字更简单。

我喜欢compsmart的KISS解决方案!

答案 6 :(得分:0)

http://mottie.github.io/tablesorter/docs/

设置日期格式。以下是可用选项。 (修改版v2.0.23)。

  • &#34; MMDDYYYY&#34; (默认)
  • &#34; DDMMYYYY&#34;
  • &#34; YYYYMMDD&#34;

在以前的版本中,此选项设置为&#34; us&#34;,&#34; uk&#34;或者&#34; dd / mm / yy&#34;。修改此选项以更好地适应所需的日期格式。它只适用于四位数年份!

分拣机应设置为&#34; shortDate&#34;并且日期格式可以在&#34; dateFormat&#34;中设置。选项或设置为&#34;标题中的特定列&#34;选项。请参阅演示页面以了解它是否正常工作。

$(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 data-dateFormat =&#34; mmddyyyy&#34;。
  • 元数据类=&#34; {dateFormat:&#39; mmddyyyy&#39;}&#34;。这需要元数据插件。
  • 标题选项标题:{0:{dateFormat:&#39; mmddyyyy&#39; }}。
  • 标题类名称类=&#34; dateFormat-mmddyyyy&#34;。 整体dateFormat选项。

在我的情况下,我使用了

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

版本。

答案 7 :(得分:0)

这是我的答案:

<td data-order=<fmt:formatDate pattern = "yyyy-MM-dd" value = "${myObject.myDate}" />>${myObject.myDate}</td>

更多详细信息,请点击此处:https://datatables.net/manual/data/