我有一个显示ID,姓名和出生日期的表格,如下所示:
<table id="example" class="display nowrap" style="width:100%">
<tr>
<td>id</td>
<td>name</td>
<td>date of birth</td>
</tr>
<tr *ngFor="let item of items">
<td>{{ item.id }}</td>
<td>{{ item.name }}</td>
<td>{{ item.dob }}</td>
</tr>
</table>
我有以下代码来显示数据表:
declare const $;
export class Sampleomponent implements OnInit {
items: any[] = [
{ 'id': 1, 'name': 'sample1', "dob": '1900-01-01T05:00:00' },
{ 'id': 2, 'name': 'sample2', "dob": '1937-10-11T05:00:00' },
{ 'id': 3, 'name': 'sample3', "dob": '1954-02-01T05:00:00' },
{ 'id': 4, 'name': 'sample4', "dob": '1940-12-01T05:00:00' },
{ 'id': 5, 'name': 'sample5', "dob": '1910-01-01T05:00:00' },
{ 'id': 6, 'name': 'sample6', "dob": '1901-10-09T05:00:00' },
];
ngOnInit() {
setTimeout(() => {
this.loadStyles();
}, 300);
}
loadStyles() {
$(function () {
$.fn.dataTable.moment('dd/MM/yyyy');
$('#example').DataTable( {
dom: 'Bfrtip',
title: 'test',
buttons: [
'excel', 'pdf', 'print'
]
});
});
}
}
此表能够显示该表并对所有列进行排序,但dob列除外。我一直跟随着他们的documentation,但它给了我相同的结果。出生日期或任何其他日期字段未成功排序。请假设dob
来自服务器,格式为datetime
,并且我具有所有必需的js代码。任何帮助将不胜感激!
答案 0 :(得分:1)
您被认为这是错误的方向:
在DataTables中,如果日期不可解析,则只需要特别注意它们的日期即可;例如,如果Date.parse()
返回NaN
,则需要一个插件/格式化程序。
DataTables momentjs排序插件就是这样的格式化程序。它用于将数据转换为正确的可解析格式,而不是显示或显示数据。
您的日期非常好,不需要moment.js。如果日期的任何是非法的,例如null
,则本机排序会中断。为了克服这个问题,您可以通过{p>
type
columns: [
{ data: 'dob', type: 'date' }
]
DD/MM/YYYY
(dd/MM/yyyy
返回类似Mo/01/yyyy
的日期);您可以使用render
回调来显示格式化的日期,同时保持本机datetime排序: columns: [
{ data: 'dob',
type: 'date',
render: function(data, type) {
return type == 'display' ? moment(data).format('DD/MM/YYYY') : data
}
}
]