如何在不考虑日期中的年份的情况下对日期数组进行排序

时间:2019-04-05 13:40:12

标签: angular angular2-pipe

在角度4中,我以升序显示即将到来的生日的列表。但是,它也算是一年。

我只想按日期和月份而不是年份进行排序。

如何使用管道或数组中的预排序数据显示它。Please see the image

2 个答案:

答案 0 :(得分:0)

我创建了一个自定义管道,在该管道中,我将日期的年部分作为所有日期的常量,然后对它们的时间进行补偿以使日期按升序排列。 Date.getTime()将给出自1970年1月1日起经过的毫秒数(如果我们在此点之前有日期,则它将为负数)。由于共同映射的日期将其年份设置为“ 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

答案 1 :(得分:0)

我只是在上面扩展@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
    })
  }

分选和过滤管的性能较差,并防止过度缩小。结帐Angular Documentation