[英]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.