Как я могу отсортировать массив дат без учета года в датах - PullRequest
0 голосов
/ 05 апреля 2019

В угловом 4 я показываю список предстоящих дней рождения в порядке возрастания.Тем не менее, он рассчитывает и на год.

Я просто хочу отсортировать по дате и месяцу, но не по году.

Как я могу отобразить его с помощью конвейера или предварительной сортировки данных в массиве. Please see the image

Ответы [ 2 ]

0 голосов
/ 05 апреля 2019

Я просто расширю ответ @xyz выше и предложу вам сделать что-то вроде этого:

dobDates = [
    '1949-04-06',
    '1963-04-11',
    '1965-04-05',
    '1970-04-12'
  ]

  ngOnInit(){
    this.dobDates.sort((a, b) => {
      let firstDate = new Date(a);
      let secondDate = new Date(b);
      firstDate.setFullYear(2000);
      secondDate.setFullYear(2000);
      if (firstDate.getTime() < secondDate.getTime()) {
        return -1
      }
      return 1
    })
  }

Трубы сортировки и фильтрации работают плохо и предотвращают агрессивную минимизацию.Оформить заказ Угловая документация

0 голосов
/ 05 апреля 2019

Я создал пользовательский канал, в котором я делаю год частью даты как константу для всех дат, а затем сопоставляю их время, чтобы получить даты в порядке возрастания. Date.getTime () даст миллисекунды, прошедшие с 1 января 1970 года (если у нас есть даты до этой точки, то она будет отрицательной). Так как год сопоставленных дат имеет год "2000", все они будут давать getTime () в положительных миллисекундах.

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'sortDate'
})
export class SortDatePipe implements PipeTransform {

  transform(value: any, args?: any): any {
    return value.sort((a, b) => {
      let firstDate = new Date(a);
      let secondDate = new Date(b);
      firstDate.setFullYear(2000);
      secondDate.setFullYear(2000);
      if (firstDate.getTime() < secondDate.getTime()) {
        return -1
      }
      return 1
    })
  }

}

https://stackblitz.com/edit/angular-hsdkau?file=src%2Fapp%2Fapp.component.html

...