TypeScript sort by date not working
I have an object TaskItemVO
with field dueDate
which has the type Date
:
export class TaskItemVO {
public dueDate: Date;
}
I have this method which I call when I try to sort by date but it is not working:
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate - b.dueDate;
});
}
I get this error in the return line of method:
The right-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.
The left-hand side of an arithmetic operation must be of type 'any', 'number' or an enum type.
So what is the correct way of sorting array by date fields in TypeScript?
Try using the Date.getTime() method:
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return a.dueDate.getTime() - b.dueDate.getTime();
});
}
^ Above throws error with undefined date so try below:
Edit
If you want to handle undefined:
private getTime(date?: Date) {
return date != null ? date.getTime() : 0;
}
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return this.getTime(a.dueDate) - this.getTime(b.dueDate);
});
}
As possible workaround you can use unary +
operator here:
public sortByDueDate(): void {
this.myArray.sort((a: TaskItemVO, b: TaskItemVO) => {
return +new Date(a.dueDate) - +new Date(b.dueDate);
});
}
If you are running into issues with the accepted answer above. I got it to work by creating a new Date and passing in the date parameter.
private getTime(date?: Date) {
return date != null ? new Date(date).getTime() : 0;
}
public sortByStartDate(array: myobj[]): myobj[] {
return array.sort((a: myobj, b: myobj) => {
return this.getTime(a.startDate) - this.getTime(b.startDate);
});
}