我正在使用一个叫做 datatables 的 Jquery 插件。
它很棒,但是我无法按照 dd/mm/yyyy 的格式正确排序日期。
我查看了他们的支持格式,但没有任何解决方法能够解决这个问题。
请问这里有人可以帮我吗?
我正在使用一个叫做 datatables 的 Jquery 插件。
它很棒,但是我无法按照 dd/mm/yyyy 的格式正确排序日期。
我查看了他们的支持格式,但没有任何解决方法能够解决这个问题。
请问这里有人可以帮我吗?
由于HTML 5已经得到广泛应用,并且几乎所有主流浏览器都支持它,因此现在更清晰的方法是使用HTML5数据属性 (maxx777提供了一个PHP解决方案,我正在使用简单的HTML)。对于我们场景中的非数字数据,可以使用data-sort
或data-order
属性并为其分配可排序值。
HTML
<td data-sort='YYYYMMDD'>DD/MM/YYYY</td>
这里是可用的HTML解决方案
这里是可用的jQuery解决方案。
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
"date-uk-pre": function ( a ) {
var ukDatea = a.split('/');
return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1;
},
"date-uk-asc": function ( a, b ) {
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
},
"date-uk-desc": function ( a, b ) {
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
}
} );
将上述代码添加到脚本中,并使用 { "sType": "date-uk" }
将特定的日期值列设置为日期类型,其他列设置为null,如下所示:$(document).ready(function() {
$('#example').dataTable( {
"aoColumns": [
null,
null,
null,
null,
{ "sType": "date-uk" },
null
]
});
});
/edit
的,最近已经更新了,我已经更正了链接。请注意它只是按照dd/mm/yyyy格式对日期进行排序。 - Zaheer Ahmed将日期转换为格式YYYYMMDD并添加到实际值(DD/MM/YYYY)的<td>
之前,将其包装在一个元素中,并将样式设置为display:none;
。现在日期排序将像普通排序一样工作。同样的方法也可以应用于日期时间排序。
HTML
<table id="data-table">
<tr>
<td><span>YYYYMMDD</span>DD/MM/YYYY</td>
</tr>
</table>
CSS
#data-table span {
display:none;
}
<%= idea.created_at.strftime("%Y%m%d") %>
<%= idea.created_at.strftime("%d/%m/%Y") %>
- matias salgadoHTML
标签(包括隐藏的HTML
标签)也一并取出。导致导出的文件中数据重复。它还会导出<span>
标签内的数据。 - Are0215d-none
类代替单独的CSS规则:<span class='d-none'>...</span>...
- Dan King我知道这是一个老问题,回答也都很老了。最近我发现了一种简单而干净的排序日期的方法。可以通过在HTML5中将data-order
属性添加到<td>
元素中来实现。
以下是我在PHP中所做的:
<?php
$newdate = date('d M Y', $myDateTime); // Format in which I want to display
$dateOrder = date('Y-m-d', $myDateTime); // Sort Order
?>
<td data-order="<?php echo $dateOrder; ?>" >
<?php echo $newdate; ?>
</td>
"render": function(data, type, row){ if(type == 'sort'){ return moment(data,'DD-MM-YYYY').format('YYYY-MM-DD'); } else { return moment(data,'DD-MM-YYYY').format('MM/DD/YYYY'); } }
- undefined这是我的方法,它对我起了作用。
<td data-order="@item.CreatedOn.ToString("MMddyyyyHHmmss")">
@item.CreatedOn.ToString("dd-MM-yyyy hh:mm tt")
</td>
在data-order
属性中,这个日期格式应该使用 DataTable 支持的格式。
var date = new Date();
var millisecond = Date.parse(date);
HTML
<td>'<span style="display: none;">' + millisecond + "</span>" + date + </td>
就是这样。
$mydate = strtotime($startdate);
$newformat = date('d-m-Y',$mydate);
echo '<tr>';
echo ' <td data-sort="'. $mydate .'">'.$newformat .'</td>';
$(document).ready(function() {
$.fn.dataTable.moment( 'DD/MM/YYYY' );
$('#example').DataTable();
});
虽然对于这个问题有很多答案,但我认为如果仅需要按照“YYYYMMDD”排序,则数据排序仅适用于此情况,并且在存在小时/分钟时不起作用。使用数据排序时,过滤器无法正常工作,至少我在尝试React JS时遇到了这个问题。
在我看来,最好的解决方案是使用data-order作为值,可以动态提供值以进行排序,并且在显示时格式可以不同。该解决方案稳健,适用于任何日期格式,包括“DD/MM/YYYY HH:M”。
例如:
<td data-order={obj.plainDateTime}>{this.formattedDisplayDate(obj.plainDateTime) }</td>
我从这里找到了解决方案-如何在DataTables中按隐藏列排序?
https://github.com/sedovsek/DataTables-EU-date-Plug-In
我使用了格式模式.ToString("dd/MM/yyyy");
,然后在我的jQuery.Datatable中工作正常。oTable = $('#grid').dataTable({
"sPaginationType": "full_numbers",
"aoColumns": [
{ "sType": "eu_date" },
null
]
});
});