【发布时间】:2018-12-14 21:34:26
【问题描述】:
我有一个有 2 列的表格; insdate 和 resdate。这些包括日期数据。我想按列排序。例如,如果用户单击resdate 列,我希望能够按升序/降序对其进行排序。
我尝试做类似this 的事情。
我的数据作为 json 数据从 web 服务返回。 日期以字符串形式返回。 像这样的东西是从服务器端返回的:
logs = [
{ insdate: '11.12.2018 06:41:25', resdate: '11.12.2018 06:41:26' },
{ insdate: '10.12.2018 06:42:24 ', resdate: '10.12.2018 06:42:24' },
{ insdate: '10.12.2018 06:42:29', resdate: '10.12.2018 06:42:29'},
{ insdate: '12.12.2018 06:45:00', resdate: '12.12.2018 06:45:00' },
{ insdate: '11.12.2018 06:45:47', resdate: '11.12.2018 06:45:47' },
{ insdate: '10.12.2018 06:46:42', resdate: '10.12.2018 06:46:42' },
{ insdate: '10.12.2018 06:46:42', resdate: '' },
{ insdate: '', resdate: '12.12.2018 07:16:50' },
];
我的日期是dd.MM.yyyy HH:mm:ss 格式。并且返回的结果在服务器端按insdate 排序。另请注意,insdate 或 resdate 可能为空。
对于我的桌子
<th (click)="sortType('resdate')" [class.active]="sortBy==='resdate' ">ResDate</th>
在我的 app.component.html 中。
最后在我的 app.component.ts 文件中:
sortType(sort: string)
{
this.copyLogs=this.logs;
if(sort==='resdate'){
this.logs=this.copyLogs.sort(this.sortByResDate);
}
}
sortByResDate(r1: any, r2:any){
let d1=moment(r1.resdate, 'dd.MM.yyyy HH:mm:ss').unix();
let d2 = moment(r2.resdate, 'dd.MM.yyyy HH:mm:ss').unix();
if(d1>d2) {
return 1;
}
else if(d1===d2) {
return 0;
}
else return -1;
}
由于我的日期是字符串类型,我尝试使用 unix 时间进行比较。但是出现了问题,因为我的日期没有正确排序。功能已访问,排序正常但不正确:)。
有人可以告诉我我做错了什么吗?
【问题讨论】:
标签: angular typescript angular6