Зависит от формата ваших дат.Даже если ваш вопрос показывает даты в строковом формате, я начну с предположения об объекте Javascript Date
.Итак, предположим, что ваши даты - Javascript Date
объекты, вы можете использовать функцию Date:getTime()
для сравнения.
// Depending on the origin of your array, your previously Date objects
// now can be JSON Date strings, so you need to convert them back to
// Dates (for example, you maybe is receiving the array from a rest API)
b.StartDate = new Date(b.StartDate);
a.StartDate = new Date(a.StartDate);
// To get the array in descending order, the comparison should be
// (just switch a and b with each other to get ascending order)
b.StartDate.getTime() - a.StartDate.getTime()
// first of all, make sure that both FinalDate dates are falsy or truthy
// at the same time... in this case, you should do a regular comparison of
// StartDate. After that, when you know that one of them isn't a falsy,
// you can return -1 or 1, depending on what you want (nulls at the end or
// a the start of the array):
!!a.FinalDate === !!b.FinalDate // => assure that both FinalDates are falsy or both are truthy
? b.StartDate.getTime() - a.StartDate.getTime()
: !a.FinalDate
? -1
: 1 // b.FinalDate is null, so it should come First
Итак, если вы используете обычные Javascript Date
объекты, поступающие с сервера (часть «Приведение к дате» может быть пропущена, если вы уверены, что даты являются объектами, а не строками).):
this.servidorService.getDesignacoes(this.nomeacaoId).subscribe((response) => {
if (response.length > 0) {
this.movimentos = response.sort((a, b) => {
b.StartDate = new Date(b.StartDate);
a.StartDate = new Date(a.StartDate);
return !!a.FinalDate === !!b.FinalDate
? b.StartDate.getTime() - a.StartDate.getTime()
: !a.FinalDate ? -1 : 1;
});
this.setMovimento();
}
});
Использование сравнения строк даты
Если вы уверены, что у вас есть даты в виде строк ISO или что-то подобное, вы можете использовать localeCompare()
вместо getTime()
:
this.servidorService.getDesignacoes(this.nomeacaoId).subscribe((response) => {
if (response.length > 0) {
this.movimentos = response.sort((a, b) =>
!!a.FinalDate === !!b.FinalDate
? b.StartDate.localeCompare(a.StartDate)
: !a.FinalDate ? -1 : 1);
this.setMovimento();
}
});
Использование сторонних библиотек дат
Если вы используете сторонние библиотеки, такие как momentjs
или date-fns
, вы также можете использовать их функции сравнения дат вместо вышеуказанныхстроки localeCompare
.