My date format is like this: Mon Mar 07 2022 and I want to show the latest data. I have tried this way but it's not working.
If I put new Date() into my code I got this error: var Date: DateConstructor new (value: string | number | Date) => Date ( 3 overloads) The left-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.
useEffect(() => {
setIsLoading(true)
fetch(`http://localhost:5000/dashboard/orders`)
.then(res => res.json())
.then(data => {
const latestData = data.sort((a, b) => b.date - a.date)
// const latestData = data.sort((a, b) => new Date(b.date) -new Date( a.date)) // error
setOrders(latestData)
})
.finally(() => setIsLoading(false))
}, [])
CodePudding user response:
Please Try this way
data.sort(function(a,b){
return new Date(b.date) - new Date(a.date);
});
CodePudding user response:
This is a typescript error, the sort comparator function accepts only numbers.
Note: Without getTime it works in javascript.
const data = [{
date: "Mon Mar 07 2022",
},
{
date: "Mon Mar 01 2022",
},
{
date: "Mon Mar 06 2022",
},
];
const latestData = data.sort(
(a, b) => new Date(b.date).getTime() - new Date(a.date).getTime()
);
console.log(latestData);
CodePudding user response:
Use it
data.sort(function(o1,o2){
return sort_o1_before_o2 ? -1 : sort_o1_after_o2 ? 1 : 0;
});
or
data.sort(function(a, b) {
var c = new Date(a.date);
var d = new Date(b.date);
return c-d;
});