【发布时间】:2012-05-05 18:59:53
【问题描述】:
我需要调整 jQuery Tablesorter 插件以非常简单的格式对日期进行排序,该格式由三个字母的月份和 4 位数字组成(例如 2010 年 5 月、2011 年 1 月、2012 年 3 月等)。
我一直不知道该怎么做。我尝试调整在这里找到的解析器:http://beausmith.com/blog/custom-date-sorting-for-jquery-tablesorter-plugin/。但是我迷失了reg ex。为了方便起见,我将在下面发布他的代码。
// TableSort parser for date format: Jan 6, 1978
$.tablesorter.addParser({
id: 'monthDayYear',
is: function(s) {
return false;
},
format: function(s) {
var date = s.match(/^(\w{3})[ ](\d{1,2}),[ ](\d{4})$/);
var m = monthNames[date[1]];
var d = String(date[2]);
if (d.length == 1) {d = "0" + d;}
var y = date[3];
return '' + y + m + d;
},
type: 'numeric'
});
var monthNames = {};
monthNames["Jan"] = "01";
monthNames["Feb"] = "02";
monthNames["Mar"] = "03";
monthNames["Apr"] = "04";
monthNames["May"] = "05";
monthNames["Jun"] = "06";
monthNames["Jul"] = "07";
monthNames["Aug"] = "08";
monthNames["Sep"] = "09";
monthNames["Oct"] = "10";
monthNames["Nov"] = "11";
monthNames["Dec"] = "12";
关于如何将其格式化为月份名称和年份的任何想法?谢谢!
更新: 我已经尝试从下面的 Sam 和 Fudgey 中实现一些代码(感谢您到目前为止提供的帮助!)。我不能让它工作。我尝试使用 fugey 的代码示例,因为我看到它在小提琴演示中完全按照需要工作。下面是我的 HTML 标记:
<table id="myTable" class="stripeMe sample" width="100%" cellpadding="0" cellspacing="0">
<thead>
<th width="30%" align="left">COMPANY</th><th width="35%">DESCRIPTION</th><th width="17%" align="left">INDUSTRY</th><th width="18%" align="left">EXIT DATE</th></tr></thead>
<tbody>
<tr><td width="30%"> <a href="http://www.cartera.com/vesdia.html "> Cartera Commerce, Inc.</a> </td>
<td width="35%">Provides technology-enabled marketing and loyalty solutions
</td><td width="17%"> Financials </td><td width="18%">Feb 2010</td></tr><tr><td width="30%"> <a href="http://www.criticalinfonet.com/ "> Critical Information Network, LLC</a> </td>
<td width="35%">Operates library of industrial professional training and certification materials
</td><td width="17%"> Education </td><td width="18%">Apr 2011</td></tr><tr><td width="30%"> <a href="http://www.cynergydata.com/ "> Cynergydata</a> </td>
<td width="35%">Provides merchant payment processing services and related software products
</td><td width="17%"> Merchant Processing </td><td width="18%">May 2011</td></tr><tr> <td width="30%"> <a href=" "> EVCI Career Colleges Holding Corp</a> </td>
<td width="35%">Operates post-secondary schools
</td><td width="17%"> Education </td><td width="18%">Jul 2012</td></tr><tr><td width="30%"> <a href="http://www.groundlink.com/ "> Groundlink, Inc.</a> </td>
<td width="35%">Provides ground transportation services domestically and internationally
</td><td width="17%"> Transportation </td><td width="18%">Feb 2012</td></tr><tr><td width="30%"> <a href="http://www.haggen.com/ "> Haggen, Inc.</a> </td>
<td width="35%">Operates chain of high-end grocery stores in the Pacific Northwest
</td><td width="17%"> Grocery </td><td width="18%">Aug 2011 </td></tr>
</tbody>
</table>
然后我正在使用的脚本是 fudgey 的,但我将列标题编号更改为 3(这是我表中的第 4 列),并且我更改了对 tablesorter 的调用以使用表的 id,其中这个案例是原来的#myTable。我还将它包装在 jQuery 的 $(document).ready 中:
$(document).ready(function() {
$.tablesorter.addParser({
id: 'monthYear',
is: function(s) {
return false;
},
format: function(s) {
var date = s.match(/^(\w{3})[ ](\d{4})$/);
var m = date ? date[1] + ' 1 ' || '' : '';
var y = date && date[2] ? date[2] || '' : '';
return new Date(m + y).getTime() || '';
},
type: 'Numeric'
});
$('#myTable').tablesorter({
headers: {
3: {
sorter: 'monthYear'
}
}
});
});
它仍然没有按日期对该列进行排序,我不确定它是如何排序的 - 我按这个顺序排序,这看起来几乎是正确的,但看看 2010 年 2 月的位置,就在中间2011 年的日期 - 奇怪: 2011 年 8 月 2010 年 2 月 2011 年 4 月 2011 年 5 月 2012 年 2 月 2012 年 7 月
【问题讨论】:
-
有人有什么想法吗?谢谢!
-
您需要以毫秒为单位返回日期,并且不需要monthNames数组。 See my answer to this question.
-
感谢您回答 Vik - 但是,当我添加您的代码时,我收到以下错误:TypeError: 'function parse() { [native code] }' is not a constructor (evaluating 'new Date.parse(s)')
标签: jquery parsing tablesorter date-format