我有一个数组
let array = [
{clmFirstReceivedDt: "16/03/2023"},
{clmFirstReceivedDt: "17/03/2022"},
{clmFirstReceivedDt: "13/04/2024"},
{clmFirstReceivedDt: "06/03/2024"},
{clmFirstReceivedDt: "06/02/2024"},
{clmFirstReceivedDt: "12/03/2024"}
];
当我尝试时,我的日期格式为日、月、年
array.sort((a, b) => {
const dateA = new Date(a.clmFirstReceivedDt).getTime();
const dateB = new Date(b.clmFirstReceivedDt).getTime();
return dateB - dateA;
});
当格式为月、日、年时,它工作正常,但是当日期格式更改时,顺序无法正确排序
不应依赖
Date
构造函数如何解析此类字符串。相反,您可以构建可以按词法排序的字符串或其等效的数字。在这里,我重新排列数字部分以创建一个大数字(yyyymmdd),然后它就可以工作了:
let array = [
{clmFirstReceivedDt: "16/03/2023"},
{clmFirstReceivedDt: "17/03/2022"},
{clmFirstReceivedDt: "13/04/2024"},
{clmFirstReceivedDt: "06/03/2024"},
{clmFirstReceivedDt: "06/02/2024"},
{clmFirstReceivedDt: "12/03/2024"}
];
array.sort((a, b) => {
// Extract the numeric parts and rejoin them in the propper order
const dateA = a.clmFirstReceivedDt.replace(/(..)\/(..)\/(.*)/, "$3$2$1");
const dateB = b.clmFirstReceivedDt.replace(/(..)\/(..)\/(.*)/, "$3$2$1");
return dateB - dateA; // for descending order
});
console.log(array);
如果您想对 dd/mm/yy 格式的日期进行排序 ->
let array = [
{clmFirstReceivedDt: "16/03/2023"},
{clmFirstReceivedDt: "17/03/2022"},
{clmFirstReceivedDt: "13/04/2024"},
{clmFirstReceivedDt: "06/03/2024"},
{clmFirstReceivedDt: "06/02/2024"},
{clmFirstReceivedDt: "12/03/2024"}
];
function compareDatesDescending(a, b) {
const dateA = a.clmFirstReceivedDt.split('/').reverse().join('/');
const dateB = b.clmFirstReceivedDt.split('/').reverse().join('/');
if (dateA < dateB) {
return 1;
} else if (dateA > dateB) {
return -1;
} else {
return 0;
}
}
array.sort(compareDatesDescending);
console.log(array);
希望这有帮助:)
为了确保无论日期格式如何都能正确排序,您应该在创建 Date 对象之前手动解析日期字符串。您可以通过拆分日期字符串并创建一个新的 Date 对象来实现此目的,其中年、月和日的顺序正确。
let array = [
{clmFirstReceivedDt: "16/03/2023"},
{clmFirstReceivedDt: "17/03/2022"},
{clmFirstReceivedDt: "13/04/2024"},
{clmFirstReceivedDt: "06/03/2024"},
{clmFirstReceivedDt: "06/02/2024"},
{clmFirstReceivedDt: "12/03/2024"}
];
array.sort((a, b) => {
const getDateFromString = (dateString) => {
const [day, month, year] = dateString.split('/');
return new Date(`${year}-${month}-${day}`).getTime();
};
const dateA = getDateFromString(a.clmFirstReceivedDt);
const dateB = getDateFromString(b.clmFirstReceivedDt);
return dateB - dateA;
});
console.log(array);