【问题标题】:How can I sort an array of dates without considering the year in the dates如何在不考虑日期中的年份的情况下对日期数组进行排序
【发布时间】:2019-08-27 10:28:41
【问题描述】:

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

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

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

【问题讨论】:

  • 了解创建自定义角管
  • 根据Angular Documentation不建议使用此类管道。
  • @kinny94 这完全取决于用例,我们是否有使管道不纯的要求,数据是否在变化?如果是,那么可以更改参考吗?

标签: angular angular2-pipe


【解决方案1】:

我只是要扩展上面的@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

【讨论】:

  • 管道只有在不纯管道的情况下表现不佳。
【解决方案2】:

我创建了一个自定义管道,其中我将日期的年份部分作为所有日期的常量,然后比较它们的时间以按升序获取日期。 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    相关资源
    最近更新 更多