日期排序不正确,下面的示例中如何对日期进行排序,排序是根据天而不是月份或年份进行的。我需要先按年份排序,然后按月份排序,再按天排序。
<DataTable value={item.task}
ref={dt}
selectionMode="single"
globalFilter={globalFilter}
rowClassName={classRow}
selection={selectedProduct} onSelectionChange={e => setSelectedProduct(e.value)}
footer={footer}
removableSort
dataKey="id" paginator={pagination} rows={paginationRows}
onColReorder={onColReorder}
>
{phaseColumns && phaseColumns.map(col=> {
return <Column
key={col.value}
columnKey={col.value}
field={col.value}
header={col.text}
sortable
sortOrder="-1"
/>
})}
</DataTable>
我也有同样的问题。为了正确地对日期进行排序,您必须在添加到表中的数据中创建Date对象的新实例(此代码应该有效(
dateTemplate(rowData, field) {
return rowData[field.field].toLocaleDateString(navigator.language, {
day: '2-digit',
month: '2-digit',
year: 'numeric',
})
}
我的代码中唯一不同的是,我指定了dataType中有什么列,但它不起作用。如果我按其他列进行多重排序,效果会很好。
this.state.columns.map((item) => {
if (item.datatype == "date" || item.datatype == "datetime") {
return (
<Column
key={item.field}
field={item.field}
header={item.header}
body={item.datatype == "date" ? this.dateTemplate : this.dateTimeTemplate}
sortable
filter
filterPlaceholder={item.filterPlaceholder}
filterField={item.field}
sortField={item.field}
style={{width: item.header.length + 1 + "rem"}}
dataType="date"
filterElement={this.dateFilterTemplate}
/>
);
} else if (item.datatype == "number" || item.datatype == "decimal" || item.datatype == "amount") {
return(
<Column
key={item.field}
field={item.field}
header={item.header}
sortable
filter
filterPlaceholder={item.filterPlaceholder}
filterField={item.field}
sortField={item.field}
dataType="numeric"
style={{width: item.header.length + 1 + "rem"}}
/>
);
} else {
return (
<Column
key={item.field}
field={item.field}
header={item.header}
sortable
filter
filterPlaceholder={item.filterPlaceholder}
filterField={item.field}
sortField={item.field}
dataType="text"
style={{width: item.header.length + 1 + "rem"}}
/>
);
}
})
我终于得到了这个问题的答案,您必须使用读取数据时创建的Date对象的同一实例,库排序器无法识别构造函数中日期相同的Date对象新实例。我建议有一份已经添加的日期列表。