[英]Customsort function for sorting date column not working
有人可以帮助我使用 customSort 函数进行 primeng 表列排序吗? 我的表中有一个 Date 列,它从我格式化为 'hh:mm a' 的字符串数组中获取数据,并且它没有按我希望的方式排序(而不是像凌晨 1 点、凌晨 2 点、凌晨 3 点等排序,它目前排序像上午 1 点、下午 1 点、上午 10 点、晚上 10 点,...等)我想出了这个 customSort 函数,但它仍然给我相同的结果,我的表中的所有其他内容都可以使用这个 customSort 排序,除了日期列。 有什么帮助吗?
customSort(event: SortEvent) {
event.data.sort((data1, data2) => {
let value1 = data1[event.field];
let value2 = data2[event.field];
let result = null;
if (value1 == null && value2 != null) {
result = -1;
} else if (value1 != null && value2 == null) {
result = 1;
} else if (value1 == null && value2 == null) {
result = 0;
} else if (typeof value1 === 'string' && typeof value2 === 'string') {
const time1 = Date.parse('1970-01-01 ' + value1);
const time2 = Date.parse('1970-01-01 ' + value2);
console.log(value1);
if (time1 < time2) {
result = -1;
} else if (time1 > time2) {
result = 1;
} else {
result = 0;
}
} else {
result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;
}
return event.order * result;
});
}
在 html 表中我添加了这个属性
code...
...
[customSort]="true"
(sortFunction)="customSort($event)"
...code
我做了一些更改,但排序结果仍然相同
customSort(event: SortEvent) {
event.data.sort((data1, data2) => {
let value1 = data1[event.field];
let value2 = data2[event.field];
let result = null;
if (value1 == null && value2 != null) {
result = -1;
} else if (value1 != null && value2 == null) {
result = 1;
} else if (value1 == null && value2 == null) {
result = 0;
} else {
const time1 = new Date(`1970-01-01 ${value1.padStart(5, '0')}`);
const time2 = new Date(`1970-01-01 ${value2.padStart(5, '0')}`);
const timestamp1 = time1.getTime();
const timestamp2 = time2.getTime();
if (timestamp1 < timestamp2) {
result = -1;
} else if (timestamp1 > timestamp2) {
result = 1;
} else {
result = 0;
}
}
return event.order * result;
});
}
为什么不添加一个新的属性“分钟”,比如
data.forEach(x=>{
const values=x.date?x.date.split(' '):null;
const hourMinutes=values?values[0].split(":"):null;
x.minutes=hourMinutes?(+hourMinutes[0])*60+(+hourMinutes[1]):-999
if (values && values[1]=="pm")
x.minutes+=12*60
})
然后,only按分钟排序
<ng-container matColumnDef="date" >
<th mat-header-cell *matHeaderCellDef mat-sort-header="minutes">
Date
</th>
<td mat-cell *matCellDef="let element"> {{element.date}} </td>
</ng-container>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.