前言
在寫東西的時候發現需要這麼一個東西,
而也找不到有人寫這個東東,那就自己寫一個吧
效果圖
- 之前
- 用了管道之後
前置基礎
ng2+
的基礎知識typescript
基礎
實現程式碼及用法
實現程式碼
- LongTimeago.pipe.ts
import { Pipe, PipeTransform } from "@angular/core";
function timeago(differtime: number, args: number = 5): string {
const currentYear: number = new Date().getFullYear(); // 獲取當前的年份
// 不靠譜的時間戳對映
const TimetoSecond: any = {
year: new Date(`${currentYear}`).getTime() / 1000,
month: 30 * 86400,
day: 86400,
hour: 3600,
minute: 60,
};
if (differtime >= TimetoSecond.year) {
return parseInt(`${differtime / TimetoSecond.year}`, 10) + "年前";
}
if (differtime >= TimetoSecond.month) {
return parseInt(`${differtime / TimetoSecond.month}`, 10) + "月前";
}
if (differtime >= TimetoSecond.day) {
return parseInt(`${differtime / TimetoSecond.day}`, 10) + "天前";
}
if (differtime >= TimetoSecond.hour) {
return parseInt(`${differtime / TimetoSecond.hour}`, 10) + "小時前";
}
if (differtime >= TimetoSecond.minute) {
return parseInt(`${differtime / TimetoSecond.minute}`, 10) + "分鐘前";
}
if (differtime < args) {
return "片刻之前";
} else {
return parseInt(`${differtime}`, 10) + "秒前";
}
}
@Pipe({
name: "longtimeago",
})
export class LongTimeagoPipe implements PipeTransform {
/**
*
* @param value 可以處理的值是字串(能轉為數字的)或者數字
* @param args 傳入預設多少之後才進行處理,在此之前都是片刻
*/
transform(value: string | number, args?: any): any {
// 獲取今天的時間戳,並得到秒數
const currentTimeStamp: number = new Date().getTime();
if (value) {
let paramTimestamp: number = 0; //傳入的時間戳
if (typeof value === "string") {
paramTimestamp = new Date(`${value}`).getTime();
if (Number.isNaN(paramTimestamp)) return null;
}
if (typeof value === "number") {
paramTimestamp = new Date(value).getTime();
}
const DifferTime = (new Date().getTime() - paramTimestamp) / 1000;
return timeago(DifferTime, args);
} else {
// 否則則返回原值
return null;
}
}
}
複製程式碼
用法
在對應的modules
引入即可,比如你在app.modules.ts
- app.module.ts
import { LongTimeagoPipe } from '../pipe/LongTimeago.pipe';
// 這裡省略了其他,為了更好的展示 , 在declarations引入即可在模組下的元件使用
@NgModule({
declarations: [
LongTimeagoPipe
],
imports: [
],
providers: [],
bootstrap: [AppComponent],
})
複製程式碼
- app.component.html ,
|
之後就是管道
<div class="last-reply-area">
<span>最後回覆於:</span>
<span>{{listitem.last_reply_at |longtimeago}}</span>
</div>
複製程式碼
總結
有不對之處盡請留言,會及時修正,謝謝閱讀