typescript 有角的日期前管吗?

qv7cva1a  于 2023-03-09  发布在  TypeScript
关注(0)|答案(2)|浏览(116)

我正在尝试创建后共享网站。我想创建日期前管道在角。

import {Pipe, PipeTransform} from 'angular2/core';

@Pipe({
  name: 'messageTime',
  pure: false
})
export class MessageTimePipe implements PipeTransform {
  transform(value: Date, []): string {
    var result: string;

    // current time
    let now = new Date().getTime();

    // time since message was sent in seconds
    let delta = (now - value.getTime()) / 1000;

    // format string
    if (delta < 10) {
      result = 'jetzt';
    } else if (delta < 60) { // sent in last minute
      result = 'vor ' + Math.floor(delta) + ' Sekunden';
    } else if (delta < 3600) { // sent in last hour
      result = 'vor ' + Math.floor(delta / 60) + ' Minuten';
    } else if (delta < 86400) { // sent on last day
      result = 'vor ' + Math.floor(delta / 3600) + ' Stunden';
    } else { // sent more than one day ago
      result = 'vor ' + Math.floor(delta / 86400) + ' Tagen';
    }

    return result;
  }enter code here
}

我在我的项目中尝试像上面的代码。但它不能正确工作。

v09wglhw

v09wglhw1#

首先创建管道类

ng g p pipes/DateAgo

让我们添加这些代码,

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

@Pipe({
    name: 'dateAgo',
    pure: true
})
export class DateAgoPipe implements PipeTransform {

    transform(value: any, args?: any): any {
        if (value) {
            const seconds = Math.floor((+new Date() - +new Date(value)) / 1000);
            if (seconds < 29) // less than 30 seconds ago will show as 'Just now'
                return 'Just now';
            const intervals: { [key: string]: number } = {
                'year': 31536000,
                'month': 2592000,
                'week': 604800,
                'day': 86400,
                'hour': 3600,
                'minute': 60,
                'second': 1
            };
            let counter;
            for (const i in intervals) {
                counter = Math.floor(seconds / intervals[i]);
                if (counter > 0)
                    if (counter === 1) {
                        return counter + ' ' + i + ' ago'; // singular (1 day ago)
                    } else {
                        return counter + ' ' + i + 's ago'; // plural (2 days ago)
                    }
            }
        }
        return value;
    }

}
ef1yzkbh

ef1yzkbh2#

我认为最好使用以下软件包之一来获得以前的功能,而不是创建自己的功能,原因如下:quick implementation/maintenance/new features and fixes/etc

这一个有其他没有的功能,例如i18 n,对以前文本的实时更改等。

这是一个简单的'管道只'包,因此它的重量轻,易于使用。

建议:只有当你已经在你的应用中使用moment.js时才使用这个,因为这将成为一个遗留项目,它会给你的捆绑包大小增加很多重量(见下面的评论,感谢@ymerej和@Alexandre Germain)。

  • Angular 国际

这是一个新的,看起来也很不错,它得到了i18 n支持和一个选项,以改变时间前的描述以及。

相关问题