代码之家  ›  专栏  ›  技术社区  ›  e2rabi

如何创建自定义日期管道

  •  0
  • e2rabi  · 技术社区  · 7 年前

    我正在开发angular 5,我想创建一个自定义日期管道,允许我从日期中减去一些天:

     <span>{{data.nextCertificateUpdate | date:'yyyy-MM-dd'}}</span>  
    

    例如,这将显示如下值: 2018-08-29

    我问是否有可能创建一个管道,允许我从这个日期减去天数,例如28天?

    <span>{{data.nextCertificateUpdate | mypipe:28 }}</span>  
    

    它应该显示如下值: 2018-08-01

    谢谢你的帮助

    2 回复  |  直到 5 年前
        1
  •  11
  •   Ashish Ranjan    7 年前

    除了上面Sachila给出的很好的答案之外,您还可以在自定义管道中实现完整的功能。

    import { Pipe, PipeTransform } from '@angular/core';
    import { DatePipe } from '@angular/common';
    
    @Pipe({ name: 'mypipe' })
    export class Mypipe implements PipeTransform {
      // adding a default format in case you don't want to pass the format
      // then 'yyyy-MM-dd' will be used
      transform(date: Date | string, day: number, format: string = 'yyyy-MM-dd'): string {
        date = new Date(date);  // if orginal type was a string
        date.setDate(date.getDate()-day);
        return new DatePipe('en-US').transform(date, format);
      }
    }
    

    使用定制管道,如:

    <span>{{data.nextCertificateUpdate | mypipe: 28: 'yyyy-MM-dd'}}</span>
    

    请参见以下工作示例: https://stackblitz.com/edit/angular-995mgb?file=src%2Fapp%2Fapp.component.html

        2
  •  7
  •   Dhairya Bhavsar    6 年前

    import { Pipe, PipeTransform } from '@angular/core';
    import { environment } from "../../../../environments/environment";
    import { DatePipe } from "@angular/common";
    
    @Pipe({
      name: 'dateFormat'
    })
    
    
    export class DateFormatPipe extends DatePipe implements PipeTransform {
    
      transform(value: any, args?: any): any {
        if(Object.keys(environment).indexOf("DATE_FORMAT") >= 0){
          return super.transform(value, environment.DATE_FORMAT);
        }
    
        return super.transform(value, 'dd-MM-yyyy');
    }
    

    <span>{{ data.date | dateFormat }}</span>
    
        3
  •  3
  •   Sachila Ranawaka    7 年前

    创建自定义管道调用 mypipe

    import { Pipe, PipeTransform } from '@angular/core';
    
    @Pipe({ name: 'mypipe' })
    export class Mypipe implements PipeTransform {
      transform(date: Date, day: number): string {
        date.setDate(d.getDate()-day);
        return date;
      }
    }
    

    就这样说吧

    <span>{{data.nextCertificateUpdate | mypipe:28 | date:'yyyy-MM-dd'}}</span>  
    
    推荐文章