使用的地方 模板.html
<p>
{{ date | appAgo }}
</p>
使用的地方 .ts
this.date = this.minusMonths(new Date(), 24);
minusMonths(date: Date, months: number) {
const result = new Date(date);
result.setMonth(result.getMonth() - months);
return result;
}
模拟24个月前,两年前
关于管道的代码.pipe.ts
@Pipe({ name: 'appAgo' })
export class AgoPipe implements PipeTransform {
transform(value: any): any {
if (value) {
const seconds = Math.floor((+new Date() - +new Date(value)) / 1000);
if (seconds < 29) {
// 小于 30 秒
return '刚刚';
}
const intervals = {
年: 3600 * 24 * 365,
月: 3600 * 24 * 30,
周: 3600 * 24 * 7,
天: 3600 * 24,
小时: 3600,
分钟: 60,
秒: 1
};
let counter = 0;
for (const unitName in intervals) {
if (intervals.hasOwnProperty(unitName)) {
const unitValue = intervals[unitName];
counter = Math.floor(seconds / unitValue);
if (counter > 0) {
return counter + ' ' + unitName + '前';
}
}
}
}
return value;
}
}
其实pipe就是一个翻译器,将一种形式的文字,转变成另外一种,效果如下