ngx-timeago
Version:
Live updating timestamps in Angular 6+.
205 lines (146 loc) • 5.18 kB
Markdown
Live updating timestamps in Angular.
✨ **Now with full standalone component support!** Use with NgModules or standalone components.
[](https://ihym.github.io/ngx-timeago/)
Get the complete changelog here: https://github.com/ihym/ngx-timeago/releases
- [Installation](
- [Setup](
- [Usage](
- [Configuration](
- [Contribute](
First you need to install the package:
```sh
pnpm add ngx-timeago
```
Choose the version corresponding to your Angular version:
| Angular | ngx-timeago |
| ----------------- | ----------- |
| 20 | 4.x+ |
| 16,17,18,19 | 3.x+ |
| 10,11,12,13,14,15 | 2.x+ |
| 6,7,8,9 | 1.x+ |
ngx-timeago supports both **standalone components** and **NgModule** approaches.
```ts
// main.ts
import { provideTimeago } from 'ngx-timeago';
bootstrapApplication(AppComponent, {
providers: [provideTimeago()],
});
```
```ts
// component.ts
import { TimeagoPipe } from 'ngx-timeago';
@Component({
standalone: true,
imports: [TimeagoPipe],
template: `{{ date | timeago }}`,
})
export class MyComponent {}
```
With custom configuration:
```ts
provideTimeago({
formatter: { provide: TimeagoFormatter, useClass: CustomFormatter },
clock: { provide: TimeagoClock, useClass: MyClock },
intl: { provide: TimeagoIntl, useClass: CustomIntl },
});
```
```ts
import { TimeagoModule } from 'ngx-timeago';
@NgModule({
imports: [TimeagoModule.forRoot()],
})
export class AppModule {}
```
With custom configuration:
```ts
TimeagoModule.forRoot({
formatter: { provide: TimeagoFormatter, useClass: CustomFormatter },
clock: { provide: TimeagoClock, useClass: MyClock },
intl: { provide: TimeagoIntl, useClass: CustomIntl },
});
```
For lazy loaded modules, use `forChild()` instead of `forRoot()`.
```html
<div>{{ date | timeago }}</div>
<div>{{ date | timeago: live }}</div>
```
```html
<div timeago [date]="date"></div>
<div timeago [date]="date" [live]="live"></div>
```
The `live` parameter controls automatic updates (default: `true`).
## Configuration
### Internationalization (I18n)
By default, there is no intl service available, as the default formatter doesn't provide language support.
You should provide one, if you end up with a formatter that needs it (either `TimeagoCustomFormatter` which is provided by the lib or your own). The purpose of the intl service is to contain all the necessary i18n strings used by your formatter.
```ts
export class MyIntl extends TimeagoIntl {
// Customize strings
}
// Then provide it with TimeagoCustomFormatter
provideTimeago({
intl: { provide: TimeagoIntl, useClass: MyIntl },
formatter: { provide: TimeagoFormatter, useClass: TimeagoCustomFormatter },
});
```
There is support for a large number of languages out of the box. This support is based on the string objects taken from `jquery-timeago`.
To use any of the languages provided, you will have to import the language strings and feed them to the intl service.
```ts
import { Component } from '@angular/core';
import { TimeagoIntl } from 'ngx-timeago';
import { strings as englishStrings } from 'ngx-timeago/language-strings/en';
@Component({...})
export class MyComponent {
constructor(private intl: TimeagoIntl) {
this.intl.strings = englishStrings;
this.intl.changes.next();
}
}
```
See [available languages](lib/src/language-strings/).
Implement `TimeagoFormatter` to customize timestamp display:
```ts
import { TimeagoFormatter } from 'ngx-timeago';
export class CustomFormatter extends TimeagoFormatter {
format(then: number): string {
const seconds = Math.round(Math.abs(Date.now() - then) / 1000);
if (seconds < 60) return 'just now';
if (seconds < 3600) return Math.round(seconds / 60) + ' minutes ago';
// ... your logic
}
}
```
Then provide it: `{ provide: TimeagoFormatter, useClass: CustomFormatter }`
[](lib/src/timeago.formatter.ts)
Implement `TimeagoClock` to control update intervals:
```ts
import { TimeagoClock } from 'ngx-timeago';
import { interval } from 'rxjs';
export class MyClock extends TimeagoClock {
tick(then: number) {
return interval(2000); // Update every 2 seconds
}
}
```
Then provide it: `{ provide: TimeagoClock, useClass: MyClock }`
[](lib/src/timeago.clock.ts)
```bash
$ pnpm install
$ pnpm build:lib
$ pnpm start
$ pnpm start:standalone
```
Both demos available at `http://localhost:4200`
---
MIT © [Vasilis Diakomanolis](https://github.com/ihym)